2016-11-30 86 views
1

我有一個啓動兩個子進程(和其中一個子進程啓動〜10個其他子進程)的守護進程。當我systemctl stop我的過程中,子進程似乎'積極'被systemctl殺死 - 這不會給我的進程一個清理機會。systemd`systemctl stop`積極殺死子進程

我該如何讓systemctl stop退出攻擊性攻擊,從而讓我的進程協調有序清理?我試過timeoutSec=30沒有用。

+0

你有沒有審查'男人systemd.services'和'男人systemd.kill'的文檔? –

回答

1

KillMode= [1]默認爲control-group。這意味着你的服務的每一個進程都被SIGTERM殺死。

你有兩個選擇:在每個流程和關機的

  • 手柄SIGTERM內TimeoutStopSec(默認爲90秒[2])
  • 如果你真的想從您的主要代表人物關閉過程,設置KillMode=mixed。 SIGTERM只會發送到主進程。然後在TimeoutStopSec內再次關機。如果您沒有在TimeoutStopSec內關閉,systemd會將SIGKILL發送給您的所有進程。

注:我建議在選項2,而不是KillMode=process使用KillMode=mixed,因爲後者將發送最後SIGKILL只是你的主要過程,這意味着你的子過程,如果他們已經鎖定了就不會被殺死。

[1] https://www.freedesktop.org/software/systemd/man/systemd.kill.html#KillMode=

[2] https://www.freedesktop.org/software/systemd/man/systemd-system.conf.html#DefaultTimeoutStartSec=