2017-08-15 52 views
0
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; 
} 

輸出我得到的是以下幾點:以下fork程序的輸出是什麼?

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'之前。這是隨機還是有我沒有看到的原因?

謝謝。

+0

你總是得到ADBCD,或者有時程序有時在第二個字母后終止?你似乎發佈了矛盾的信息。 –

+0

ABD ...終止... CD –

+1

看到這個答案尤其是第四部分:https://stackoverflow.com/a/6697102/13422 –

回答

1

確切的輸出完全取決於操作系統如何調度每個進程。父母和第一個孩子之間沒有同步,所以「B」和「D」可以以任何順序打印。

例如,在我的機器上,我收到「ADB(end)CD」。