Assuming that the system call fork () never fails, consider the following C programs P1 and P2 executed on a UNIX / Linux system:
|
/*P1*/
Int main() {
fork ():
fork () ;
fork () ;
Printf(“Happy\n”);
}
|
/*P2*/
Int main() {
fork ();
Printf(“Happy\n”);
fork ()
Printf(“Happy\n”);
fork () ;
Printf(“Happy\n”);
}
|
Statement I: P1 displays "Happy" 8 times.
Statement II: P2 displays "Happy" 12 times.
In the light of the above statements, choose the correct answer from the options given below
1.Both Statement I and Statement II are true
2.Both Statement I and Statement II are false
3.Statement I is correct but Statement II is false ✓ Correct
4.Statement I is incorrect but Statement II is true
Solution
The correct answer is option 3
Explanation:
fork() is a system call used to create a child process.
Once a child process is created, both the parent process and the child process run the next line following the fork() command simultaneously.
'n' number of successive for() calls create 2n - 1 child processes.
in P1:
Each child process prints one "Happy".
Parent process also prints one "Happy".
So, number of times P1 displays "Happy" = (23 - 1) + 1 = 8
In P2:
At first fork(), a new child process with two fork() and printf statements is created.
Similarly, more child processes are created at each fork() command.
So, P2 shows "Happy" 14 (2 + 4 + 8 )times.