0

環境:

私は 3 つの子にフォークする python サーバーを持っています。

親の場合:

  • SIGTERM はすべての子を殺すことになっており、SIGHUP はログに記録して存在することになっています

子供の場合:

  • SIGTERM と SIGHUP の両方が SIG_DFL にマップされます

問題:

コマンドラインからスクリプトを開始し、python <script.py>SIGHUP を親に送信すると、kill -1 <pid-of-parent>正常に動作します。親は終了し、使用中の子は I/O が完了した後にのみ終了します。

しかし、同じスクリプトが systemd スクリプトで開始された場合、SIGHUP を親に送信すると、まだビジー状態の子は SIGTERM を受信し、I/O が中断されます。

これに対する説明/解決策はありますか? 設定ミスですか?

4

1 に答える 1

0

KillModesystemd サービスをに設定する必要があるようですprocess

KillMode ... このユニットのプロセスを強制終了する方法を指定します。... control-group に設定すると、このユニットのコントロール グループに残っているすべてのプロセスがユニットの停止時に強制終了されます ... process に設定すると、メイン プロセス自体のみが強制終了されます ... デフォルトは control-group です

詳細: https://www.freedesktop.org/software/systemd/man/systemd.kill.html#

別のアプローチは、そのようにプロセスを生成する場合にin call に設定creationflagsすることです。subprocess.CREATE_NEW_PROCESS_GROUPsubprocess.Popen

于 2016-03-15T17:09:51.277 に答える