Как упомянуто в ответе Джима Гариссона , вы в итоге вызываете fork
три раза, создавая тем самым 3 дополнительных процесса.
Вот более простой пример, который может помочь вам понять, что происходит:
say "Start";
fork();
say "Middle";
fork();
say "End";
Один из возможных выходов:
Start
Middle
Middle
End
End
End
End
Первоначальный процесс говорит «Пуск», затем разветвляется, и в итоге вы получаете два процесса, каждый из которых говорит «Средний», а затем разветвление, каждый из которых создает один дополнительный процесс, и, таким образом, вы получаете 4 процесса, говорящих «Конец» ».
Может быть полезно графическое представление:
"Start"
|
fork()
|
------------------------------
| |
"Middle" "Middle"
| |
fork() fork()
| |
--------------- ---------------
| | | |
"End" "End" "End" "End"