【问题标题】:How to kill child processes & grandchild processes controlled by supervisor如何杀死主管控制的子进程和孙子进程
【发布时间】:2016-08-31 00:40:11
【问题描述】:

在Supervisor控制的进程中,我fork子进程

for i in xrange(MANAGER_PROCESS_NUM):
    p = gipc.start_process(target=daemon_process, args=())
    record.append(p)
for r in record:
    r.join()

然后在每个子进程中,我创建孙子进程:

w = gipc.start_process(target=self._pool_worker, daemon=True)

我如何在运行时杀死所有子进程和孙子进程 "supervisorctl stop xxx" 停止我的主进程?

【问题讨论】:

    标签: python process supervisord gipc


    【解决方案1】:

    你有几个选择:

    1. 修改您的 Python 程序,以便当它们接收到像 SIGTERM 这样的信号时,它们会明确地将它们传播给子级。

    2. 启用supervisord 选项stopasgroupkillasgroup。这些选项是documented,用于向整个进程组发送信号,而不仅仅是一个进程。

    【讨论】:

    • 我已经设置了配置选项:stopasgroup=true, killasgroup=true。但它似乎不起作用。
    • 你能检查(使用ps -f左右)每个进程的Parent PID是什么,每个进程的进程组ID(PGID)是什么?了解全部细节在这里真的很有帮助。另外,您能否尝试在每个 Python 程序中设置一个信号处理程序以在 SIGTERM 上打印某些内容,并使用 stopasgroup 进行测试?
    • 好的,我试试,非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 2013-01-03
    相关资源
    最近更新 更多