2016-03-04 74 views
0

我想知道如何forkwaitexit彼此溝通。什麼通過&nexit(0)返回到父進程?系統在以下程序工作中如何調用?

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 

int main(void){ 

    int n=5; 
    fork(); 
    wait(&n); 
    printf("%d\n", n); 
    exit(0); 
} 

我得到的輸出是

sh-4.3$ main 
5 
0 
sh-4.3$ 
+3

每個人的手冊都會給你所有你需要的細節。 –

+0

我想通過一個程序來獲得清晰的概念(例子)。它有助於我更好地理解事物。請你解釋一下嗎? – vish22

+0

'wait(2)'manpage有一個非常廣泛的例子,它包括'fork'。請參閱http://linux.die.net/man/2/wait –

回答

0

您可以找到有關手冊頁,forkwaitexit這些功能。

對於叉我會查找usage examples然而,因爲它是一種很複雜的解釋。

+0

這應該是一個評論 – Nik

1

fork()創建一個新的進程,幾乎是進行調用的那個進程的確切副本。新創建的過程稱爲孩子。謹防確切的複製是一個強有力的假設!這實際上意味着新創建的流程正處於其父級確切狀態下的創建時間(這是一個稍微粗略的假設,但爲了簡單起見,請按照原樣)。然後一個進程打電話給fork,然後兩個進程從調用中返回! fork是一種克隆機器(一隻羊進入,然後兩隻機器退出!)。通常你應該測試返回的值fork(詳見man)。

然後從現在開始兩個進程獨立運行!

一個打電話給wait,而另一個自己也打電話。 wait的效果在兩者中都不相同。對於原始流程,wait將等待孩子終止,然後捕獲有關該事件的信息。孩子呼叫wait,但因爲它沒有小孩wait什麼也不做,並立即返回。然後打印其未變更的變量n的值:5。然後它exit s值0.所以它終止。這將允許父進程從wait調用中喚醒並捕獲其子(0)的退出值。然後打印它0exit s。

請注意,此場景的某些變體可能會發生,但這不會改變可觀察到的行爲,併發運行可能以不同方式運行

+0

感謝您的解釋Jean.I有一個懷疑,爲什麼不父母過程也打印5.我的意思是不應該在輸出中有兩次兩次? – vish22