[英]How to kill child process harmlessly
父進程派生並獲取子 ID。 孩子做一些事情。 如果它在 1 秒后沒有完成,則父母會通過 id 殺死它。 但是,如果孩子在 1 秒之前完成並且系統執行另一個與我孩子具有相同 ID 的進程,該怎么辦。 在這種情況下,父進程將殺死無辜的進程。 我怎樣才能避免這種情況?
PID 被保留,直到wait
(或類似的函數,如waitpid
)告訴父進程已退出。
如果進程已經退出,但你的父進程還沒有被wait
告知,這個進程被稱為“僵屍”。 殺死僵屍進程時什么也不會發生。
因此,您的父進程只需要小心不要在wait
告訴它子進程完成后發送任何信號。 這應該很容易。 不涉及競爭條件。
注意:這也意味着您需要在生成子進程后調用wait
(或類似waitpid
的相關函數)。 或者,如果您的進程退出,那么它創建的僵屍進程就會消失(因為它們被調用wait
的 PID 1“采用”)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.