2016-02-25 97 views
0

我很難理解fork()在用作條件時是如何工作的。我知道fork()創建一個子進程作爲父進程的確切副本。我的問題是,在以下程序中創建了多少個進程?下面是代碼:在條件中使用fork()時程序中創建了多少個進程?

int global = 0; 
int main() { 
    while(global < 5 && !fork()) { 
     sleep(1); 
     global += 1; 
    } 
    printf("%d\n", global); 
    return 0; 
} 

我是一個假設每個fork()調用,已運行每個進程會創建一個子進程,並只要變量全球達到5值繼續像

+0

當你嘗試時發生了什麼? –

+0

@MartinJames它輸出5作爲全局值。 –

回答

1

fork()調用在子代中返回0,在父代中返回pid

因此,在父項中,第二個條件將評估爲0,循環將退出並打印。在孩子中,第二個條件將評估爲非零,並且循環將再次以更高的全局值(這是繼承的)分叉。

因此,除父項外,我們還會看到總共5個新進程。

+0

Downvoter照顧糾正這個答案? – merlin2011

+0

我沒有投票,但「循環將退出而不打印」對我來說似乎是錯誤的。它應該退出循環並打印,不是嗎? –

+1

要麼我誤讀了原來的問題,要麼就是編輯過。當我到達一臺電腦時,我會糾正這個問題。謝謝! – merlin2011

相關問題