Каждый вызов функции fork создаст новый процесс.Каждый процесс (включая родительский) выполнит код после своего вызова fork.Каждый родитель будет ждать смерти своего ребенка (помните, что когда ребенок вызывает fork, он также становится родителем).
Нарисуйте схему, чтобы быть уверенной:
Это дает 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 () .
Обратите внимание, что количество процессов не изменитсяесли вы закомментируете ожидание звонков.