名称
systemd.kill - 配置如何杀死进程
概要
service.service, socket.socket, mount.mount, swap.swap, scope.scope
描述
service, socket, mount, swap, scope 单元都拥有一组如何杀死进程的配置选项,本手册页讲解了这些选项。
根据单元类型的不同,这些共有的选项分别位于单元文件的 [Service], [Socket], [Mount], [Swap] 小节。
systemd.unit(5) 记录了所有类型的单元所共有的配置选项,systemd.service(5), systemd.socket(5),
systemd.swap(5), systemd.mount(5), systemd.scope(5) 则分别说明了各单元所独有的配置选项。
选项
KillMode=
设置在单元停止时,杀死进程的方法:control-group(默认值), process, mixed, none
control-group 表示杀死该单元的 cgroup 内的所有进程(对于 service 单元,在杀死前还要先执行 ExecStop= 动作)。
process 表示仅杀死主进程
mixed 表示首先向主进程发送 SIGTERM 信号(见下文),然后向该单元的 cgroup 内的所有其他进程发送 SIGKILL 信号(见下文)。
none 表示仅执行 ExecStop= 动作,而不杀死任何进程。
none 会导致:即使单元已经停止,但是该单元的 cgroup 依然一直存在,直到其中的进程全部死亡。
杀死进程的时候,第一步使用 KillSignal= 信号(默认为 SIGTERM),立即紧跟着一个 SIGHUP 信号(仅当 SendSIGHUP=yes 时);
若等候 TimeoutStopSec= 时间后,进程依然未被杀死,则第二步继续使用 SIGKILL 信号(除非 SendSIGKILL=no)强制杀死。详见 kill(2) 手册。
KillSignal=
设置杀死进程的第一步使用什么信号(见上文)。默认值为 SIGTERM 信号。所有可用的信号详见 signal(7) 手册页。
注意,systemd 会无条件的紧跟此信号之后再发送一个 SIGCONT 信号,以确保干净的杀死已挂起(suspended)的进程。
SendSIGHUP=
是否在第一步发送 KillSignal= 信号后,立即紧跟着向该单元的所有进程再发送一个 SIGHUP 信号。
这主要用于通知 shell 之类的进程,它们的连接已中断。默认为"no"
SendSIGKILL=
是否在超过 TimeoutStopSec= 时间后,使用 SIGKILL 信号杀死依然残存的进程。默认为"yes"
参见
systemd(1), systemctl(1), journalctl(8), 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)