簡體   English   中英

如何無害地殺死子進程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM