fork () создает дочерний процесс, создавая другой экземпляр родительского процесса.Он возвращает 0 дочернему элементу и PID дочернего элемента родительскому элементу.
В этом случае при выполнении i = fork () родитель получает i, назначенный в качестве PID идентификатора PIDдочерний процесс, который, скорее всего, больше 1. Цикл for в родительском процессе не будет запущен ни разу, так как i <2 </strong> завершится ошибкой.На данный момент существует два процесса P и C1 (дочерний)
. После того, как родительский элемент выполнит разветвление, дочерний элемент получает 0 в качестве возвращаемого значения, i = 0. Это означает условие i <2 </strong> успешно.Child выполняет fork () в теле цикла, создавая C2.Значение i в C1 и C2 равно 0. i увеличивается до 1.
C1 и C2 выполняют i <2 </strong>, это условие успешно.Вилка выполнена обоими.С3 порождается С1, а С4 - С2.
Значение i увеличивается до 2. i <2 не выполняется.Все они выходят из цикла </p>
Подводя итог, в этой программе создано 4 дочерних процесса.Вы можете попробовать это с помощью следующей программы, где вы увидите, как распечатываются 5 PID.
#include <stdio.h>
main()
{
int i = 0;
for (i = fork(); i < 2; i++)
fork();
printf("Hello World i %d\n", getpid());
}