我读了很多关于命令使用的教程kill
,大多3种方法
kill -15 <pid>
kill -SIGTERM <pid>
kill -TERM <pid>
出于脚本目的以及 Macos 的可移植性,将不会使用代码编号。因为kill -l
macos 与 Linux 不同。因此,在这里输入播放信号名称。
问题
- 正确或建议的发送方法是什么信号名称通过
kill
命令?
我是说:
- 特殊兴趣小组某物或者某物?
为什么?这两种方法的存在只有一个原因,对吗?是否有强制理由使用一种方法而不是另一种方法?
环境
这种情况适用于 Ubuntu 桌面/服务器和 Fedora 工作站/服务器
答案1
最便携的变体是
kill -s TERM -- …
这就是指定的形式在 POSIX 中,没有扩展名:-s
后跟信号名称(如定义)在signal.h
,没有SIG
前缀,或 0 表示“空”信号(用于检查是否存在具有给定标识符的进程)。
SIGTERM
是默认信号,因此可以使用以下规范形式将其发送到进程或进程组:
kill <pid>
kill -- -<pgid>
一般来说,在 Linux 上,大多数实现kill
(包括 shell 内置函数)都接受带有或不带有前缀的数字或名称信号SIG
;值得注意的例外包括内置的 dash,它是基于 Debian 的发行版中的kill
默认设置,以及/bin/sh
希利伯恩外壳。
无论您使用的工具支持什么形式,都没有“强制”理由使用一种形式而不是另一种形式。我个人会避免使用数字形式,因为它们可能看起来不明确:是kill -9 -15
要发送SIGTERM
到进程组 9 和 15,还是SIGKILL
发送到进程组 15? (是后者,但有些读者可能想知道。)我也会省略前缀,SIG
因为它并不是在所有地方都能被识别。
请注意,POSIX 确实指定了一些数字信号值:
数字 | 信号 |
---|---|
0 | “空”信号 |
1 | HUP |
2 | INT |
3 | QUIT |
6 | ABRT |
9 | KILL |
14 | ALRM |
15 | TERM |