繁体   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