In studying CSAPP, I encounter the practice: list all of the possible output sequences for the following program:
int main()
{
if(Fork()==0) {
printf("a");
}
else {
printf("b");
waitpid(-1,NULL,0);
}
printf("c");
exit(0);
}
the answer is :acbc abcc bcac bacc;
Why is bcac
correct? The function waitpid()
suspends execution of the calling process until the child process in its wait set terminates. So the parent can't not print c
, until the child process terminate, which means the child prints both a
and c
.
I'm really confused about it. I don't know why bcac
is correct. The parent process should hold or suspend until child terminates.