Выполнение кода только несколько полезно (и не может быть сделано во время экзамена!) - лучше нарисовать дерево процессов. Правила таковы, что каждый дочерний процесс начинает выполнение после вызова fork
, который его породил, у родителей ненулевой pid
, а у детей pid
равен нулю.
main
/ | \
pid1 pid2 pid3
/ |
pid4 pid3
Мы можем видеть main
порождающих трех детей, pid1
, pid2
и pid3
(pid1
тривиален, а два других появляются в блоке if
). pid1
переходит к условной части else
и порождает pid4
перед завершением. pid2
- единственный трюк: он снова появляется в pid3
, потому что там начинается его выполнение.
Ответ: