SystemD 中的 KillMode none 或进程有什么问题?

SystemD 中的 KillMode none 或进程有什么问题?

systemd.kill 文档有以下要说的KillMode

KillMode=

指定如何终止此单元的进程。以下为 control-group、mixed、process 或 none 之一。

如果设置为 control-group,则在单元停止时,此单元的控制组中的所有剩余进程都将被杀死(对于服务:在执行 stop 命令之后,如 ExecStop= 所述)。如果设置为 combined,则 SIGTERM 信号(见下文)将发送给主进程,而后续的 SIGKILL 信号(见下文)将发送给单元控制组的所有剩余进程。如果设置为 process,则只有主进程本身会被杀死(不推荐!)。如果设置为 none,则不会杀死任何进程(强烈建议不要这样做!)。在这种情况下,在单元停止时只会执行 stop 命令,否则不会杀死任何进程。停止后仍存活的进程将留在其控制组中,并且控制组在停止后将继续存在,除非为空。

请注意,不建议将 KillMode= 设置为 process 甚至 none,因为这允许进程逃离服务管理器的生命周期和资源管理,并且即使其服务被视为已停止并且假定不消耗任何资源仍保持运行。

确实KillMode=none如此已弃用,尽管 PR 弃用它们并没有提供太多信息。

什么确切地KillMode=process或 的问题是none什么?这些进程可能会一直存在,直到它们自然死亡,或者系统关闭?但那又怎么样?

为了便于理解,我正在寻找如下模式在这篇博文中用于零停机部署 HTTP 服务器。在我的例子中,有些工作线程可能运行长达一小时,而杀死它们意味着从头开始它们的工作。

相关内容