Сколько процессов будет создано? - PullRequest
0 голосов
/ 11 июня 2018

За исключением начального родительского процесса, сколько процессов будет создано следующим фрагментом кода:

fork();
wait(0);
fork();
wait(0);
fork();

Я думал о 7 процессах, потому что отец всегда ждет, пока ребенок завершится, норебенок никогда не выходит.Так что это будет 2 ** n - 1.

1 Ответ

0 голосов
/ 11 июня 2018

Каждый вызов функции fork создаст новый процесс.Каждый процесс (включая родительский) выполнит код после своего вызова fork.Каждый родитель будет ждать смерти своего ребенка (помните, что когда ребенок вызывает fork, он также становится родителем).

Нарисуйте схему, чтобы быть уверенной:

enter image description here

Это дает 7 процессов, исключая родительский процесс.

Считайте дерево из его крайней правой ветви, и тогда, возможно, следующие комментарии имеют смысл:

fork();  // Process 'c0' was created
wait(0); // Parent process 'p' waits for its child 'c0' to change state.
fork();  // c1, c4
wait(0); // c0, p
fork();  // c2, c3, c5, c6

Онлайн-демонстрация , созданная мной с помощью печатных операторов и идентификаторов процессов, подтверждает, что.


Напоминание 0Аргумент в wait():

ожидает любого дочернего процесса, чей идентификатор группы процессов равен идентификатору вызывающего процесса.

Подробнее в C - значение ожидания (NULL) при параллельном выполнении fork () .

Обратите внимание, что количество процессов не изменитсяесли вы закомментируете ожидание звонков.

...