В Linux с запущенным супервизором 3.0b1 отправка 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, а не через перехват SIGKILL супервизором и убийство его потомков.
FWIW, если супервайзер pid 19285:
kill -9 -19285
Отрицание pid отправляет сигнал уничтожения всей группе процессов.
Я пытался добиться того же. Отправка SIGTERM вместо SIGKILL у меня сработала.
Я бы предпочел «SIGTERM», а не «SIGKILL с инвертированным идентификатором процесса», поскольку он позволяет плавно завершить работу.
Самый полезный комментарий
FWIW, если супервайзер pid 19285:
Отрицание pid отправляет сигнал уничтожения всей группе процессов.