Всего будет 24 процесса. Вот как это сделать.
После первого fork () есть два процесса. В одном из них pid == 0
; в другом процессе pid != 0
.
После второй вилки есть 4 процесса (половина из них имеет pid == 0
).
После третьей вилки есть 8 процессов (и половина у них есть pid == 0
).
Четвертый оператор fork выполняется только теми процессами, у которых pid == 0
. Таким образом, 4 процесса выполнят fork (и превратятся в 8 процессов). Остальные 4 процесса не будут выполнять fork и останутся 4. Всего у нас есть 8 + 4 = 12 процессов.
Наконец, еще один fork превращает наши 12 процессов в 24.
Как много потоков будет создано в результате выполнения кода?
Теперь вопрос о семантике. Вы говорите, что процессы не являются потоками, и поэтому создаются 0 потоков? Вы говорите, что из 24 процессов первый является исходным процессом и не создается этим кодом, так что всего создается 23 процесса? Это вопрос семантики, а не программного обеспечения, поэтому мы не можем вам с этим помочь.
Количество напечатанных строк
Первый printf выполняется только оригинальный процесс (так как он еще не разветвлялся). Второй printf выполняется всеми 24 процессами (непосредственно перед завершением каждого процесса). Таким образом, всего печатается 25 строк.