python - fork 并忽略子退出状态

标签 python linux posix

目前正在编写一个自动更新多个长时间运行的程序的守护进程。我不关心程序的退出状态,因为 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/

相关文章:

python连续请求: can I use s. mount()?

python - 当我的共享库由 icc -O3 或 -O2 优化并通过 Python ctypes 使用时,会发生段错误

linux - 使用 awk 输出列发送电子邮件

linux - 有什么办法可以减少libreoffice中嵌入字体文档的大小吗?

c - 命名管道上的 Poll() 会不断并立即返回 POLLHUP

bash - 使用 POSIX Shell 将 CamelCase 转换为 lowerCamelCase

python - 将随机数据分箱至轴长度不等的规则 3D 网格

python - Python 中的 DecisonTreeclassifer() - 尝试构建树时出错

linux - 如何在 Linux 中的另一个进程终止时得到通知

c - 在多个进程之间共享 POSIX 信号量