If we run the Parent program: How many times will L16 execute? That is, how many
ID: 3855880 • Letter: I
Question
If we run the Parent program: How many times will L16 execute? That is, how many lines of "HHHH" will be printed? Please briefly explains. L1: #include L2: #define NULL 0 L3: int main (void) L4: { L5: if (fork() == 0) { L6: execvc("Child", NULL, NULL): L7: //printf("I am child process with PID: %d ", getpid()): L8: //exit(0): L9: } else { L10: printf("Process[%d]: in execution .. ", getppid()): L11: sleep(5): L12: if(wait(NULL) > 0) L13: printf("Process[%d]: ", getppid()): L14: printf("Process[%d]: ... ", getpid()): L15: } L16: printf("HHHH: %d ", getpid()): L17: } L1 denotes Line 1, L2 denotes L2, etc. In L6: Child is another executable problem. If we run the Parent program: what information will Line 14 print out?Explanation / Answer
Here L16 will be executed twice. Once for child process, next for parent process. Let me explain how:
The fork() call returns either 0 or a non-zero number which denotes whether child is executing or the parent is executing (respectively).
So if fork() returns 0, first child starts executing. It executes L6 and then comes out of if block and executes L16.
After that the parent process gets control and starts executing from L9, as for parent process fork() has returned 1(non-zero). it calls wait(NULL) in L12 which means if any child is pending to execute, parent will first wait for them to finish and then parent will finish. After that it prints L14 and then goes to L16.
In case fork has returned the control to parent first, then parent has called wait(NULL), so then also, there will be 2 calls for L16 as well.
Note: Here i am assuming that Child is some other executable Program, which doesn't in turn call This parent process. Otherwise there will be infinite loop, as both will call each other always.
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.