I have this bit of code:
printf(\"L1 \");
if(fork() != 0) {
printf(\"L2 \");
if(fork() != 0) {
printf(\"L3 \");
fork();
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:
L1
and end with End
.fork()
returns a non-zero value, it is the parent process.if
fails in the first child, so it prints L1 End
.if
passes in the parent, and the subsequent outputs will then include L2
.if
fails in the second child, so it prints L1 L2 End
.if
passes in the parent, and the subsequent outputs will then include L3
.fork()
creates two processes (or creates one and continues in the parent), both of which print L1 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