С http://www.csl.mtu.edu/cs4411.ck/www/NOTES/process/fork/create.html (акцент мой):
После создания нового дочернего процесса оба процесса выполнят следующую инструкцию после системного вызова fork () .
Итак, fork()
создает дочерний элемент, и дочерний элемент не начинается с начала цикла: он начинается с инструкции после вызова fork
, то есть с if(pids[i]==0){
, что для дочернего элемента правда. Тогда он сделает что-то , а затем break
. Разрыв означает, что он выходит из цикла for
, поэтому дочерний процесс не создает больше процессов.
Итак, отец создает N детей, тогда как каждый ребенок выполняет свою работу и выходит из цикла, не создавая больше детей.