я изменить код, чтобы иметь больше отладки печати.
#include <stdio.h>
#include <stdlib.h>
#include "unistd.h"
int main() {
pid_t x=0;
pid_t y=0;
printf("FORK X \n");
x=fork();
if(y>0) {
printf("FORK 1 \n");
fork();
}
if(x==0) {
printf("FORK 2 \n");
y=fork();
}
printf("FORK 3 \n");
fork();
if(y==0){
printf("FORK 4 \n");
fork();
printf("Some text\n");
}
}
Вот выход, и каждый "FORK 4" приведет к TWO "Некоторые текст", так как есть вилка впоследствии:
Масленица: TMP greedy52 $ ./a.out
FORK X
FORK 3
FORK 4
FORK 2
FORK 4
Some text
Some text
FORK 3
FORK 3
Some text
Some text
FORK 4
Some text
FORK 4
Some text
Some text
Some text
В 4 "раскошелиться 4" достигаются (каждая успешная вилка() вызов создает два процесса а и В):
- @ х = вилка() -> х = 0 и @FORK 3 вилки! A
- @ x = fork() -> x! = 0 и @FORK 3 fork B
- @ x = fork() -> x = 0 и @ y = fork() -> y = 0 и @FORK 3 вилке
- @ х = вилка() -> х = 0 и у = @ вилка() -> у = 0 и @FORK 3 вилки Б
Символ @ х = вилка() -> x = 0 и @ y = fork() -> y! = 0 ветвь не генерирует никакого «некоторого текста».
FORK X --------> x != 0 -------------------------------> FORK 3 A -----> FORK 4 A (Some text)
| | |--> FORK 4 B (Some text)
| |
| |-----------------------------> FORK 3 B -----> FORK 4 A (Some text)
| |--> FORK 4 B (Some text)
|
|
|----> x == 0 -----> FORK 2 A (y = 0) -----> FORK 3 A -----> FORK 4 A (Some text)
| |--> FORK 4 B (Some text)
| |---> FORK 3 B -----> FORK 4 A (Some text)
| |--> FORK 4 B (Some text)
|
|---> FORK 2 B (y != 0) -----> FORK 3 A -----> XXX bad end
|---> FORK 3 B -----> XXX bad end
Только два раза, с этими звонками! Вы пытались добавить некоторые 'printf' для отслеживания потока управления? –
Это выглядит как школьное задание для меня. В чем цель этого вопроса? – manishg
Да, это школьное задание. Я должен определить, сколько раз текст печатается. –