スーパーバイザー3.0b1を実行しているLinuxでは、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を否定すると、プロセスグループ全体にkillシグナルが送信されます。
私は同じことを達成しようとしていました。 SIGKILLの代わりにSIGTERMを送信することは私のために働きました。
正常にシャットダウンできるので、「プロセスIDが否定されたSIGKILL」よりも「SIGTERM」の方が好きです。
最も参考になるコメント
FWIW、スーパーバイザーがpid 19285の場合:
pidを否定すると、プロセスグループ全体にkillシグナルが送信されます。