2012-10-18 22 views
1

我將fork()父進程傳遞給子進程,由fork()返回的PID存儲在父進程的內存中,然後時間流逝並且子進程終止;現在我可以確定存儲在父內存中的PID值是否仍然指向相同的分叉子,並且如何確保此PID不會引用具有相同PID的不同進程,這最終可能在孩子之後產生終止?確保PID是指正確的過程

+1

請參閱['waitpid'](http://linux.die.net/man/3/waitpid)函數。 –

回答

3

操作系統不能重用孩子的PID,直到父母已確認它知道孩子已停止執行。

父母使用waitwaitpid調用進行確認。終止的孩子會處於「殭屍」狀態,而父母不會調用這些功能。在這些調用返回後,父級會知道如果有一個進程使用與孩子相同的PID運行,那麼它不是孩子。

爲了額外的安全,你可能需要checking the parent PID of the child process

1

您可以:

  • 呼叫man 2 wait父,得到通知,當孩子還沒有死;
  • 在父母與子女之間創造你的投票協議。如果孩子仍然是一樣的,它必須迴應父母的投票,其價值與產卵後的價值相同。你可以爲此使用一些POSIX IPC機制。當父代只有一個執行線程並且不能在父代中使用線程時,這會很有用。