本文译者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布。
本文译者十分愿意与他人分享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有的作品集:
由于译者水平有限,因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好),请来信指出,任何提高译文质量的建议我都将虚心接纳。
systemd.kill — 配置 如何杀死进程
,
service
.service
,
socket
.socket
,
mount
.mount
,
swap
.swapscope
.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=
时间后,
进程仍然未被杀死,
则继续第二步使用 SIGKILL
或
FinalKillSignal=
信号(除非
SendSIGKILL=no
)强制杀死。
详见
kill(2)
手册。
默认值是
control-group
KillSignal=
¶设置
杀死进程的第一步
使用什么信号(见上文)。
所有可用的信号详见
signal(7) 手册。
默认值为
SIGTERM
信号。
注意,
systemd 会无条件的紧跟此信号之后再发送一个
SIGCONT
信号,
以确保干净的杀死已挂起(suspended)的进程。
SendSIGHUP=
¶是否在第一步发送
KillSignal=
信号后,
立即紧跟着向该单元的所有进程再发送一个 SIGHUP
信号。
这主要用于通知 shell 之类的进程,
它们的连接已中断。
默认为"no"
SendSIGKILL=
¶是否在超过
TimeoutStopSec=
时间后,
使用 SIGKILL
或
FinalKillSignal=
信号杀死依然残存的进程。
默认值为"yes"
FinalKillSignal=
¶当发生了超时并且已开启
SendSIGKILL=
时,
发送哪个信号给剩余的进程。
应当设置为不能被服务捕获和处理的信号(SIGTERM
就不合适)。对于开发人员来说,
可以使用它来生成 coredump 以了解
为什么服务在接收到最初的 SIGTERM
信号时没有正确终止。具体做法是 设置 LimitCORE=
并且将 FinalKillSignal=
设为
SIGQUIT
或 SIGABRT
之一。
此选项的默认值为 SIGKILL
WatchdogSignal=
¶在看门狗(WatchdogSec=
)发生超时的情况下,
使用哪个信号终止服务。
此选项的默认值为 SIGABRT