Sous Linux exécutant le superviseur 3.0b1, l'envoi d'un SIGKILL au processus supervisé ne termine pas tous ses processus enfants, c'est-à-dire les processus démarrés via le fichier de configuration.
SIGKILL ne peut pas être piégé. Cela le démontre :
$ 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')
>>>
Il n'y a rien que nous puissions ajouter ou modifier dans notre code pour changer cela.
Certes, mais pourquoi tuer le processus parent ne tue pas les enfants ? Je veux dire au niveau Linux, pas en interceptant SIGKILL et en tuant ses enfants.
FWIW, si le superviseur est le pid 19285 :
kill -9 -19285
La négation du pid envoie le signal d'arrêt à l'ensemble du groupe de processus.
J'essayais d'obtenir la même chose. L'envoi de SIGTERM au lieu de SIGKILL a fonctionné pour moi.
Je préférerais le "SIGTERM" à "SIGKILL avec ID de processus annulé" car il permet un arrêt en douceur.
Commentaire le plus utile
FWIW, si le superviseur est le pid 19285 :
La négation du pid envoie le signal d'arrêt à l'ensemble du groupe de processus.