在运行 supervisor 3.0b1 的 Linux 上,向 supervisord 进程发送 SIGKILL 不会终止其所有子进程,即通过配置文件启动的进程。
SIGKILL 不能被困。 这证明了它:
$ python
>>> import signal
>>> def handler(signum, frame):
... pass
...
>>> signal.signal(signal.SIGKILL, handler)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
RuntimeError: (22, 'Invalid argument')
>>>
我们无法在代码中添加或更改任何内容来改变它。
当然,但为什么杀死父进程不会杀死子进程? 我的意思是在 Linux 级别,而不是通过 supervisord 拦截 SIGKILL 并杀死它的孩子。
FWIW,如果主管是 pid 19285:
kill -9 -19285
否定 pid 会向整个进程组发送终止信号。
我试图实现同样的目标。 发送 SIGTERM 而不是 SIGKILL 对我有用。
我更喜欢“SIGTERM”而不是“带有否定进程ID的SIGKILL”,因为它允许正常关闭。
最有用的评论
FWIW,如果主管是 pid 19285:
否定 pid 会向整个进程组发送终止信号。