2016-03-15 84 views
0

環境SIGTERM:systemd - 兒童正在接受對母公司退出

我有叉蟒蛇服務器到3個孩子。

父:

  • SIGTERM應該殺害所有兒童和SIGHUP只是應該記錄和存在

對於孩子:

  • 兩個SIGTERM和SIGHUP映射到SIG_DFL

問題:

當我通過命令行python <script.py>啓動腳本,併發送SIGHUP母公司kill -1 <pid-of-parent>它表現良好。父母出口和忙碌的孩子只有在完成他們的I/O後才能退出。

但如果相同的腳本開始systemd腳本,當我發送SIGHUP母公司,目前仍在忙碌的兒童接受SIGTERM並導致中斷的I/O。

對於做任何解釋/解決方案?這是一些錯誤配置?

回答

0

好像你需要爲systemd服務設置KillModeprocess

KillMode ...指定本單元的過程如何被殺死。 ......如果設置爲控制組,這個單位的對照組中所有剩餘的進程會被殺死的單位停止......如果設置爲過程,只有主過程本身被殺害......默認爲控制組

更多信息:https://www.freedesktop.org/software/systemd/man/systemd.kill.html#

另一種方法是設置creationflagssubprocess.CREATE_NEW_PROCESS_GROUPsubprocess.Popen通話,如果你產卵以這種方式處理。

+0

從文檔僅當服務使用'服務stop'命令停止'KillMode'將是有效的。在我的情況下,我直接發送SIGHUP。使用該參數的快速測試也顯示相同。 – mittal

+0

您可能還想嘗試設置'SendSIGKILL = no' – Grief

+0

我認爲只有在服務使用服務命令單獨管理的情況下,所有這些參數纔有意義。如果SIGHUP是直接發送的,那些不會出現在圖片中 – mittal