systemd.kill 中文手册

译者:金步国


版权声明

本文译者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布。

其他作品

本文译者十分愿意与他人分享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有的作品集:

联系方式

由于译者水平有限,因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好),请来信指出,任何提高译文质量的建议我都将虚心接纳。


手册索引 · 指令索引systemd-241

名称

systemd.kill — 配置 如何杀死进程

大纲

service.service, socket.socket, mount.mount, swap.swap, scope.scope

描述

service, socket, mount, swap, scope 单元都拥有一组如何杀死进程的 配置选项(亦称"配置指令"或"单元属性")。

本手册页列出并解释了上述五种类型的单元所共有的配置选项。 参见 systemd.unit(5) 以了解所有类型的单元所共有的配置选项,而 systemd.service(5), systemd.socket(5), systemd.swap(5), systemd.mount(5), systemd.scope(5) 则分别说明了 各单元所独有的配置选项。

根据单元类型的不同,本手册页列出的共有选项(亦称"指令"或"属性")分别位于单元文件的 [Service], [Socket], [Mount], [Swap] 小节。

选项

KillMode=

设置在单元停止时,杀死进程的方法。 取值范围如下: control-group, process, mixed, none

control-group 表示杀死该单元的 cgroup 内的所有进程(对于 service 单元,还要先执行 ExecStop= 动作)。 process 表示仅杀死主进程。 mixed 表示首先向主进程发送 SIGTERM 信号(见下文), 然后再向该单元的 cgroup 内的所有其他进程发送 SIGKILL 信号(见下文)。 none 表示仅执行 ExecStop= 动作, 而不杀死任何进程。 这会导致即使单元已经停止, 但是该单元的 cgroup 依然一直存在, 直到其中的进程 全部死亡。

杀死进程的时候, 第一步首先使用 KillSignal= 信号(默认为 SIGTERM) (如果 SendSIGHUP=yes ,那么还会立即紧跟一个 SIGHUP 信号), 若等候 TimeoutStopSec= 时间后, 进程仍然未被杀死, 则继续第二步使用 SIGKILLFinalKillSignal= 信号(除非 SendSIGKILL=no)强制杀死。 详见 kill(2) 手册。

默认值是 control-group

KillSignal=

设置 杀死进程的第一步 使用什么信号(见上文)。 所有可用的信号详见 signal(7) 手册。 默认值为 SIGTERM 信号。

注意, systemd 会无条件的紧跟此信号之后再发送一个 SIGCONT 信号, 以确保干净的杀死已挂起(suspended)的进程。

SendSIGHUP=

是否在第一步发送 KillSignal= 信号后, 立即紧跟着向该单元的所有进程再发送一个 SIGHUP 信号。 这主要用于通知 shell 之类的进程, 它们的连接已中断。 默认为"no"

SendSIGKILL=

是否在超过 TimeoutStopSec= 时间后, 使用 SIGKILLFinalKillSignal= 信号杀死依然残存的进程。 默认值为"yes"

FinalKillSignal=

当发生了超时并且已开启 SendSIGKILL= 时, 发送哪个信号给剩余的进程。 应当设置为不能被服务捕获和处理的信号(SIGTERM 就不合适)。对于开发人员来说, 可以使用它来生成 coredump 以了解 为什么服务在接收到最初的 SIGTERM 信号时没有正确终止。具体做法是 设置 LimitCORE= 并且将 FinalKillSignal= 设为 SIGQUITSIGABRT 之一。 此选项的默认值为 SIGKILL

WatchdogSignal=

在看门狗(WatchdogSec=)发生超时的情况下, 使用哪个信号终止服务。 此选项的默认值为 SIGABRT

参见

systemd(1), systemctl(1), journalctl(1), systemd.unit(5), systemd.service(5), systemd.socket(5), systemd.swap(5), systemd.mount(5), systemd.exec(5), systemd.directives(7), kill(2), signal(7)