systemd`systemctl stop`积极杀死子进程

GoZ*_*ner 5 redhat systemd systemctl

我有一个类似守护进程的进程,它启动了两个子进程(其中一个子进程启动了约10个其他子进程)。当systemctl stop我的进程出现时,子进程似乎被“积极地”杀死了systemctl-这并没有给我清理进程的机会。

我如何才能摆脱systemctl stop侵略性的杀戮,从而使我的流程有序地进行清理?

timeoutSec=30无济于事。

Ben*_*zke 8

KillMode=[1]默认为control-group。这意味着您的服务的每个过程都会被SIGTERM杀死。

您有两种选择:

  • 在每个进程中处理SIGTERM并在TimeoutStopSec其内关闭(默认为90秒[2])
  • 如果您确实要从主进程中委派关闭,请设置KillMode=mixed。SIGTERM将仅发送到主进程。然后再次关闭TimeoutStopSec。如果未在中关闭TimeoutStopSec,则systemd将发送SIGKILL到所有进程。

注意:我建议KillMode=mixed在选项2中使用而不是KillMode=process,因为后者只会将最终结果发送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=