以下fork程序的输出是什么?

时间:2017-08-15 18:05:57

标签: 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);
    }
    wait(0); // parent waits for child to finish
}
printf("D\n"); 
exit(0);


return 0;
}

我得到的输出如下:

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)

我已经运行了100次并且总是得到ABD ... terminate ... CD。 ' D'总是出现在' B'之前。这只是随机的还是我没有看到的原因?

谢谢。

1 个答案:

答案 0 :(得分:1)

确切的输出完全取决于操作系统如何安排每个进程。父母和第一个孩子之间没有同步,所以" B"和" D"可以按任何顺序打印。

例如,在我的机器上,我得到了" ADB(结束)CD"。