fork
return -1 on error и 0 или positive else, поэтому строка if (pid < 0) break;
говорит «если была ошибка, выход из цикла».
Предполагая, что не ошибка, это что-то вроде:
В начале, i=0
, и у вас есть один процесс. назовем это p0
.
В строке fork();
, p0
создается другой процесс. назовем это p1
.
В каждом из них у нас есть i++
(так что теперь i
- это 1), и мы повторяем цикл снова.
p0
и p1
, отдельно, имеют команду fork();
, поэтому каждый из них создает другой процесс. назовем новые процессы p2
и p3
.
Теперь у каждого процесса есть i++
, который устанавливает i
как 2, и мы снова запускаем цикл.
Каждый из 4 процессов, которые мы имеем, запускаем линию fork();
и создает новый процесс. так что теперь у нас есть также p4
, p5
, p6
, p7
.
Каждый процесс увеличивает его i
до 3, а затем, поскольку условие цикла теперь ложно, цикл, наконец, заканчивается.
Теперь процесс 8 прибывает (отдельно) на следующую строку.
(На самом деле, каждая итерация двойное число процессов, так что если вы измените 3
, например, 15
, вы будете иметь 2^15 процессов в конце.)
если это #homework, отметьте его как таковой –
Функция называется «fork», а не «вилка»; Я исправил заголовок. –