如何无害地杀死 child 进程
How to kill child process harmlessly
Parent 进程分叉并获取 child id。 Child 做一些事情。如果它在 1 秒后没有完成 parent 通过 id 杀死它。但是,如果 child 在 1 秒之前完成并且系统执行另一个与我的 child 具有相同 ID 的进程怎么办。在这种情况下 parent 将杀死无辜的进程。我怎样才能避免这种情况?
PID 被保留,直到 wait
(或类似 waitpid
的函数)告诉 parent 进程已经退出。
如果进程已退出但 wait
尚未告知您 parent,则进程称为 "zombie"。 Nothing happens when you kill a zombie process.
因此,您的 parent 只需要注意不要在 wait
告诉它 child 进程完成后发送任何信号。这应该很容易。不涉及竞争条件。
注意:这也意味着您需要在生成 child 进程后调用 wait
(或类似 waitpid
的相关函数)。或者,如果您的进程退出,那么它创建的僵尸进程就会消失(因为它们通过调用 wait
的 PID 1 获得 "adopted")。
Parent 进程分叉并获取 child id。 Child 做一些事情。如果它在 1 秒后没有完成 parent 通过 id 杀死它。但是,如果 child 在 1 秒之前完成并且系统执行另一个与我的 child 具有相同 ID 的进程怎么办。在这种情况下 parent 将杀死无辜的进程。我怎样才能避免这种情况?
PID 被保留,直到 wait
(或类似 waitpid
的函数)告诉 parent 进程已经退出。
如果进程已退出但 wait
尚未告知您 parent,则进程称为 "zombie"。 Nothing happens when you kill a zombie process.
因此,您的 parent 只需要注意不要在 wait
告诉它 child 进程完成后发送任何信号。这应该很容易。不涉及竞争条件。
注意:这也意味着您需要在生成 child 进程后调用 wait
(或类似 waitpid
的相关函数)。或者,如果您的进程退出,那么它创建的僵尸进程就会消失(因为它们通过调用 wait
的 PID 1 获得 "adopted")。