No Linux executando o supervisor 3.0b1, enviar um SIGKILL para o processo supervisord não encerra todos os seus processos filho, ou seja, os processos iniciados por meio do arquivo de configuração.
SIGKILL não pode ser preso. Isso demonstra:
$ 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')
>>>
Não há nada que possamos adicionar ou alterar em nosso código para mudar isso.
Certamente, mas por que matar o processo dos pais não mata os filhos? Quero dizer, no nível do Linux, não através do supervisord interceptando o SIGKILL e matando seus filhos.
FWIW, se o supervisor for pid 19285:
kill -9 -19285
Negar o pid envia o sinal de eliminação para todo o grupo de processos.
Eu estava tentando conseguir a mesma coisa. Enviar SIGTERM em vez de SIGKILL funcionou para mim.
Eu preferiria o "SIGTERM" em vez do "SIGKILL com ID de processo negado", pois permite um desligamento normal.
Comentários muito úteis
FWIW, se o supervisor for pid 19285:
Negar o pid envia o sinal de eliminação para todo o grupo de processos.