вложенный fork () - как подсчитать количество процессов - PullRequest
0 голосов
/ 10 июля 2020

Запутался в этом примере для Fork ()

int main(){
   if (fork()){
     if (!fork()) 
       fork();
   }
   fork();
   printif("1 ");
}

Я их считаю, и будет 12 повторяющихся (сколько будет процессов !!!)

1 Ответ

0 голосов
/ 11 июля 2020

Давайте посчитаем их:

int main(){
   if (fork()){          // 1
     if (!fork())        // 2
       fork();           // 3
   }
   fork();               // 4
   printif("1 ");          
}

Когда вы запустите программу, у вас будет первый процесс, который будет предком всех остальных.

fork_1 создаст дочерний процесс , последний будет иметь 0 как возвращаемое значение. поэтому он будет продолжен после оператора if, затем запустится fork_4, следовательно, будет создан другой дочерний элемент. printf выполняется дважды (2) на данный момент.

Давайте продолжим первый процесс, получивший ненулевое значение, он выполнит fork_2, а затем получит ненулевое возвращаемое значение. Он продолжается после второго оператора if, запускается fork_4. Будет два процесса (предок и его дочерний процесс) => еще два printf.

Дочерний процесс, созданный в fork_2, получит возвращаемое значение null, поэтому условие if истинно. Он запускает fork_3, что дает два процесса, и каждый из них запускает fork_4. Таким образом, printf будет запущен четыре (4) раза.

В конце printf будет запущен 8 раз. Таким образом, вы получите восемь 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...