通过“kill”命令发送信号名称的正确或建议方法是什么?

通过“kill”命令发送信号名称的正确或建议方法是什么?

我读了很多关于命令使用的教程kill大多3种方法

kill -15 <pid>
kill -SIGTERM <pid>
kill -TERM <pid>

出于脚本目的以及 Macos 的可移植性,将不会使用代码编号。因为kill -lmacos 与 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

相关内容