This is a question from recent GATE entrance exam.
A process executes the code
fork();
fork();
fork();
The total number of child processes created is
(A) 3. (B) 4. (C) 7. (D) 8.
My answer was (A) 3.
My view is that after each fork(), 1 child process will be created and execution of parent will continue normally.
Unreliable answer (without any explanation) from coaching institutes were (C) 7.
I think they are treating that each fork will create a child process and a new parent process. And they are counting all the parent process as well. [I am not allowed to post image but my friend explained in a diagram, a tree with each left node forking down in two nodes. Therefore 4 parent node in left and 3 child node in right.] But the Question clearly mentions child process only. And also I don't think that parent process is newly created in forking.
Can someone explain some forking fundamentals, and a proper solution to above question please.
P.S. If programming language make any difference in concept of forking, then as per syllabus, this should be either C or C++ program.
At the end of the third fork call, there will be a total of 8 processes. Out of these 8 processes, there will be 7 child processes and 1 parent process.
There are two important points to note while solving these type of problems:
A fork() call returns twice, once in the parent and once in the child process. If fork is successful, it returns with a value of 0 in child process and with non-zero value(pid of child) in parent process.
Both the child and parent process starts executing right after the fork call.
I have explained the above problem with the help of a diagram and also a video. I hope you find it useful.
fork example
fork()
results in both the original process and one child to start from that point in the code. Therefore you have this picture:
I think there are 8 processes in total, or 7 descendents of the original, or 3 direct children of the original (the others are grand-children and great-grand-children).
fork()
, assuming no failures (throughout), there are two processes.fork()
again - so there are now four processes.fork()
again - so there are now eight processes.If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With