Here’s how to understand it, starting at the for
loop.
-
Loop starts in parent,
i == 0
-
Parent
fork()
s, creating child 1. -
You now have two processes. Both print
i=0
. -
Loop restarts in both processes, now
i == 1
. -
Parent and child 1
fork()
, creating children 2 and 3. -
You now have four processes. All four print
i=1
. -
Loop restarts in all four processes, now
i == 2
. -
Parent and children 1 through 3 all
fork()
, creating children 4 through 7. -
You now have eight processes. All eight print
i=2
. -
Loop restarts in all eight processes, now
i == 3
. -
Loop terminates in all eight processes, as
i < 3
is no longer true. -
All eight processes print
hi
. -
All eight processes terminate.
So you get 0
printed two times, 1
printed four times, 2
printed 8 times, and hi
printed 8 times.