我使用supervisor 3守护一个python进程,这个进程是通过一个为python设置一些configuration的bash脚本启动的。 bash脚本在前台运行python程序,FWIW。
这个设置有以下问题:当supervisord试图杀死进程时,它只会杀死bash脚本,而不是python进程。 所以我最终泄漏了运行旧代码的python进程,随后出现各种问题。 我怎样才能解决这个问题?
主pipe是否有一些configuration选项来告诉它杀死subprocess?
bash脚本是否会捕获TERM信号并将其明确传递给孩子会有帮助吗? 这似乎是不必要的,因为当我从交互式shell运行它,子python进程被杀死就好了。
我看到主pipe让我select要杀的信号,现在默认为TERM 。 可能改变这种帮助?
这里是关于Stackoverflow的一个类似的问题:
主pipe不能干净地启动龙卷风
我的解决scheme是在相关的[program:x]组中使用stopasgroup = true 。
我最近写了一篇文章,讨论这个问题,并解释如何正确地解决它:
http://veithen.github.io/2014/11/16/sigterm-propagation.html