systemctl stop和 和有什么区别systemctl kill?
systemctl kill支持向进程发送自定义信号,例如-9(SIGKILL)而不是-15(SIGTERM)。那么,唯一的区别是systemctl kill更通用的版本systemctl stop,即systemctl stop总是发送-15(SIGTERM)吗?
作为示例,systemctl stop与( )systemctl kill的结果相同:ssh.servicesshd
systemctl stop:
$ systemctl stop sshd\n$ systemctl status sshd\n\xe2\x97\x8f ssh.service - OpenBSD Secure Shell server\n Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)\n Active: inactive (dead) since Mon 2021-11-08 09:09:32 CET; 1s ago\n Docs: man:sshd(8)\n man:sshd_config(5)\n Process: 2086153 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)\n Process: 2086154 ExecStart=/usr/sbin/sshd -D $SSHD_OPTS (code=exited, status=0/SUCCESS)\n Main PID: 2086154 (code=exited, status=0/SUCCESS)\nRun Code Online (Sandbox Code Playgroud)\nsystemctl kill:
$ systemctl kill sshd\n$ systemctl status sshd\n\xe2\x97\x8f ssh.service - OpenBSD Secure Shell server\n Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)\n Active: inactive (dead) since Mon 2021-11-08 09:10:15 CET; 1s ago\n Docs: man:sshd(8)\n man:sshd_config(5)\n Process: 2086486 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)\n Process: 2086487 ExecStart=/usr/sbin/sshd -D $SSHD_OPTS (code=exited, status=0/SUCCESS)\n Main PID: 2086487 (code=exited, status=0/SUCCESS)\nRun Code Online (Sandbox Code Playgroud)\n
Ste*_*art 11
systemctl kill与它非常相似kill,它只是发送一个信号(默认=SIGTERM)。kill和 之间的主要区别systemctl kill是您可以指定一个单位而不是 PID,并且 systemd 理解您想要将该信号发送到哪些进程。
另一方面systemctl stop将停止命令行上指定的一个或多个单元。首先systemd将运行任何ExecStop=行(如果有)。如果仍有任何进程,请使用KillMode=规则处理这些进程。之后,它发送SIGTERM(可以用 更改KillSignal=)。如果SendSIGHUP=设置了,它会立即发送SIGHUP。如果进程不能很好地处理SIGTERM并且未能在90秒内停止(可以用 更改TimeoutStopSec=),则发送SIGKILL(可以用 更改FinalKillSignal=)。另外,如果KillMode=control-group(默认),那么任何子进程也将被杀死。
所以你可以看到这systemctl kill只是发送了一个信号。这可能会停止一个单元,但 systemd 并不能确保这种情况发生。相反,systemctl stop将停止一个单位。
systemctl kill相当于systemctl stop假设:
ExecStop=KillSignal=单元文件中等于--signal=.KillMode=未设置,或等于process。sshd.service 的特别之处在于它包含:
ExecReload=/usr/sbin/sshd -t
ExecReload=/bin/kill -HUP $MAINPID
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您可能会问:这两个命令有什么不同:
# systemctl reload sshd
# systemctl kill --signal=SIGHUP --kill-who=sshd.service
Run Code Online (Sandbox Code Playgroud)
虽然它们几乎相同,但这里的区别非常明显......在信号之前reload调用。/usr/sbin/sshd -t
sshd.service 的另一个特别之处是它包含KillMode=process. 这使得systemctl kill和systemctl stop更接近,因为孤立子进程不会被 systemd 清理。默认情况下KillMode=control-group会导致 systemd 清理所有孤立的子进程
| 归档时间: |
|
| 查看次数: |
28239 次 |
| 最近记录: |