#include
int main()
{
if(fork()==0){
printf("a");
}
else{
printf("b");
waitpid(-1,NULL,0);
}
printf("c");
求问这个程序的可能输出序列?
答案给出了acbc,bcac,abcc,bacc四种答案。
但是我觉得不应该有四种,因为fork以后有两个进程,但是父进程会遇到waitpid,这个必须要等到子进程
终止以后,父进程才会继续下去,所以只有三种情况,一是父进程先开始,遇到waitpid等待,知道子进程结束,那么就是bacc,或者是子进程先开始,那么就有acbc,或者是abcc
waitpid(-1,NULL,0);应该主要是这个函数调用的原因:
第一次参数为-1时,任何子进程退出waitpid()都将返回,不一定是自己的子进程,所以bcac,这种情况是可能存在的
不好意思,你是对的,我说错了。
参考地址:http://csapp.cs.cmu.edu/2e/errata.html
p. 772, Solution to Practice Problem 8.3. The sequence bcac is not possible. Strike the second to last sentence. The last sentence should be “There are three possible sequences: acbc, abcc, and bacc.” Please see Web Aside ECF:GRAPHS on the Web Aside page for an example of the process graph.