2014-10-30 62 views
0

過程誰可以創建其他進程(子進程)處理,同時,以下是正確的:創建孩子的Linux

一)該工藝具有PID = 0

B)子進程能夠繼續獨立生活

C)處理,創造者複製它的上下文子進程

d)上述所有屬實

我的看法是, a)不能因爲PID = 0被保留,處理器創建者不會將其上下文複製到子進程中,所以我在考慮b,因爲它可以獨立生活,但不會被稱爲守護進程?那麼這個問題是否有一個正確的答案呢?

回答

0

fork()系統調用會創建現有進程的克隆/副本。現在兩個進程正在運行,具有相同的數據,程序中的位置以及進程映像。區別在於fork()系統調用的返回值。由於fork()函數向父(分叉)過程和子(分叉)過程返回不同的值,因此可以確定您是在父項還是在子項中運行。

父進程(fork)在父進程中接收到結果fork()== childpid,所以父進程知道該進程的子進程號(因此可以終止它,等待它終止等) 。

父代也可能收到fork()== -1結果,表明fork()系統調用失敗。

孩子(分叉)進程在子進程中接收到結果fork()== 0,並且如果你想知道孩子的進程ID,你可以直接詢問當前進程ID來獲得進程孩子的ID。

這裏是一個相關的貼子,我發佈了代碼示例,How to use fork()。 (a)不是真的,因爲每個父母和孩子都有一個不是= 0的進程ID,但是fork()的返回值在孩子中總是= 0。所以可能看起來手冊是說PID是= 0。 (b)部分是真實的。部分(c)不是真的,因爲它不是複製任何東西的過程創建者,而是複製過程中的系統調用(在父過程的上下文中)。

1

閱讀關於fork瞭解如何創建子進程。這可能很好地回答您的問題