If the fork()
calls all fail, there'll only be one process, so it will print:
L1 L2 L3 End
If every fork()
call succeeds, then:
- Assuming line buffered or fully buffered output,
- There will be 4 lots of print out, but their sequence is indeterminate, and could be (but probably won't be) interleaved on the output.
- Each output will start with
L1
and end withEnd
. - When
fork()
returns a non-zero value, it is the parent process. - The first
if
fails in the first child, so it printsL1 End
. - The first
if
passes in the parent, and the subsequent outputs will then includeL2
. - The second
if
fails in the second child, so it printsL1 L2 End
. - The second
if
passes in the parent, and the subsequent outputs will then includeL3
. - The third
fork()
creates two processes (or creates one and continues in the parent), both of which printL1 L2 L3 End
.
So, the output will consist of:
L1 End
L1 L2 End
L1 L2 L3 End
L1 L2 L3 End
but the sequence is not guaranteed.
After posting the analysis above, I checked it by running it, and the first sample run produced:
L1 End
L1 L2 L3 End
L1 L2 End
L1 L2 L3 End
Note that if the output is non-buffered, then the output is different. L1
will appear once; L2
will appear once; L3
will appear once; and End
will appear four times.
One possible sequence is:
L1 L2 End
L3 End
End
End
Another observed sequence (second of two runs) was:
L1 L2 L3 End
End End
End