2016-03-11 44 views
1

我們知道fork()會創建一個新的子進程,並將子進程的PID返回給父進程,並將0返回給子進程。我在想,爲什麼他們這樣設計它(返回值),爲什麼返回值不是按照相反的順序。我認爲將父母的PID返回給父母並且0也可以工作,每個孩子都會知道誰是其父母,並且每當它終止時,它就會向其各自的父母過程發出信號,這會產生什麼後果進場?我錯過了什麼嗎?爲什麼fork()的返回值不是相反的方式?

+8

父母需要爲孩子「等待」,所以它需要孩子的PID。不是相反的。孩子可以很容易地獲得父母的PID。 –

回答

5

之所以這樣,是因爲任何小孩都可以通過調用getppid來獲得其父母的pid,而父母不知道孩子的pid是在沒有fork的情況下告訴它的。

如果父母想要等待某個特定的孩子退出,它需要將孩子的pid傳遞給waitpid

+0

我想如果會以相反的方式,那麼必須設計一個函數來獲取父母的孩子的pid。所以我認爲這不是它背後的真正原因。 –

+1

@RajeevSingh一個進程可以有多個子進程,但只有一個父進程。所以'getppid'將總是返回調用進程的父進程的PID。即使你可以得到孩子的pid列表,你也需要知道哪個是哪個。 – dbush

0

子進程可以通過getppid()獲取父進程的PID。因此,父需要fork來獲得子進程的PID

0

如果他們設計得像fork()返回0給父進程,那麼在一個父進程的情況下就是創建多個子進程。

如果多個fork()創建一個子進程並且全部返回0到同一個父進程。無法識別單個子進程,並且設計爲將子進程ID返回給父進程。

相關問題