C 以下fork程序的输出是什么?
我得到的输出如下:C 以下fork程序的输出是什么?,c,fork,C,Fork,我得到的输出如下: int main() { int p1, p2; printf("A\n"); // we always print A first p1 = fork(); if (p1 == 0) { // child printf("B\n"); p2 = fork(); // fork if (p2 == 0) { sleep(2); printf("C\n"); exit(0); } w
int main() {
int p1, p2;
printf("A\n"); // we always print A first
p1 = fork();
if (p1 == 0) { // child
printf("B\n");
p2 = fork(); // fork
if (p2 == 0) {
sleep(2);
printf("C\n");
exit(0);
}
wait(0); // parent waits for child to finish
}
printf("D\n");
exit(0);
return 0;
}
我已经运行了100次,我总是得到ABD。。。终止光盘“D”总是在“B”之前。这是随机的还是我没有看到的原因
谢谢。确切的输出完全取决于操作系统如何安排每个进程。父级和第一个子级之间没有同步,因此B和D可以按任意顺序打印
例如,在我的机器上,我得到ADB end CD。您总是得到ADBCD,还是程序有时会在第二个字母后终止?你似乎发布了相互矛盾的信息。。。终止看到这个答案,尤其是第四部分:啊,但是我发现:发布的代码有一些重大的疏忽。1缺少必要的头文件语句。2对fork的调用返回的类型为pid\t not int 3对fork的两个调用都缺少对错误返回的检查。4顶级和二级父进程无法等待子进程退出。这样的疏忽导致僵尸进程5中有这么多进程,对wait的调用不知道jst在等待谁。强烈建议使用waitpid cont
A // always first
B or D // whether we are in parent or child. Program may be terminated here
C // always since parent of p2 waits
D // since p2 parent exits if condition, prints D, then exits(0)