目前正在编写一个自动更新多个长时间运行的程序的守护进程。我不关心程序的退出状态,因为 child 退出的唯一方法是在升级时强制退出。不幸的是,我正在创建大量的僵尸进程。
我知道我可以使用 waitpid(0, WNOHANG)
来监听任何 child 的变化(这几乎正是我想要的),但是我也在使用python 多处理模块并行运行多个单独的升级进程,因此我可以从中运行 waitpid
的长时间运行的进程实际上是已终止进程的祖 parent ,因此它永远不会收到任何信号。
那么,有没有什么方法可以派生一个子进程,这样我就不需要检查退出状态,或者我只需要处理我的进程表被僵尸填满的情况?
最佳答案
您应该能够通过设置 SIGCHLD 的信号处理程序来控制它。
在 C 中,您将使用:
signal(SIGCHLD, SIG_IGN);
您需要使其适应 Python 界面。
您可以使用 Python 2 signal或 Python 3 signal模块;对于手头的问题,它们似乎是相同的:
import signal
signal.signal(signal.SIGCHLD, signal.SIG_IGN)
参见:POSIX Signal Concepts对于底层系统行为(特别是该部分下的“信号操作”和 SIG_IGN
)。
警告:Python 代码未经正式测试!
关于python - fork 并忽略子退出状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24638039/