父进程 fork 并获取子 ID。 child 做一些事情。如果它在 1 秒后没有完成, parent 会通过 id 杀死它。但是,如果 child 在 1 秒内完成并且系统执行另一个与我的 child 具有相同 ID 的进程怎么办。在这种情况下, parent 会杀死无辜的进程。我怎样才能避免这种情况?
最佳答案
PID 保留到 wait
(或类似的函数,如 waitpid
)告诉父进程该进程已退出。
如果进程已退出但 wait
未告知您的 parent 然而,这个过程被称为“僵尸”。 Nothing happens when you kill a zombie process .
所以,你的 parent 只需要小心不要在 wait
之后发送任何信号。告诉它子进程已完成。这应该很容易。不涉及竞争条件。
注意:这也意味着您需要调用wait
(或相关函数,如 waitpid
)在生成子进程后。或者,如果您的进程退出,那么它创建的僵尸进程就会消失(因为它们被 PID 1 “采用”,它调用 wait
)。
关于c - 如何无害地杀死子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59617510/