En Linux que ejecuta el supervisor 3.0b1, enviar un SIGKILL al proceso supervisor no finaliza todos sus procesos secundarios, es decir, los procesos iniciados a través del archivo de configuración.
SIGKILL no puede quedar atrapado. Esto lo demuestra:
$ 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')
>>>
No hay nada que podamos agregar o cambiar en nuestro código para cambiar eso.
Ciertamente, pero ¿por qué matar el proceso padre no mata al hijo? Me refiero al nivel de Linux, no a través de un supervisor que intercepta a SIGKILL y mata a sus hijos.
FWIW, si el supervisor es pid 19285:
kill -9 -19285
Negar el pid envía la señal de interrupción a todo el grupo de procesos.
Estaba tratando de lograr lo mismo. Enviar SIGTERM en lugar de SIGKILL funcionó para mí.
Preferiría el "SIGTERM" sobre "SIGKILL con ID de proceso negado" ya que permite un cierre ordenado.
Comentario más útil
FWIW, si el supervisor es pid 19285:
Negar el pid envía la señal de interrupción a todo el grupo de procesos.