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

Man*_*dan 7 linux kill signals options

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

kill -15 <pid>
kill -SIGTERM <pid>
kill -TERM <pid>
Run Code Online (Sandbox Code Playgroud)

出于脚本目的以及 Macos 的可移植性,将不会使用代码编号。因为kill -lmacos 与 Linux 不同。因此,在这里输入播放信号名称。

问题

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

我是说:

  • SIG什么的还是什么

为什么?这两种方法的存在只有一个原因,对吗?是否有强制理由使用一种方法而不是另一种方法?

环境

这种情况适用于 Ubuntu 桌面/服务器和 Fedora 工作站/服务器

Ste*_*itt 12

最便携的变体是

\n
kill -s TERM -- \xe2\x80\xa6\n
Run Code Online (Sandbox Code Playgroud)\n

\xe2\x80\x99s 是 POSIX 中指定的形式,不带扩展名:-s后跟信号\xe2\x80\x99s 名称,如signal.h所定义,没有SIG前缀,或 0 表示 \xe2\x80\x9cnull\xe2\x80 \x9d 信号(用于检查是否存在具有给定标识符的进程)。

\n

SIGTERM是默认信号,因此可以使用以下规范形式将其发送到进程或进程组:

\n
kill <pid>\nkill -- -<pgid>\n
Run Code Online (Sandbox Code Playgroud)\n

一般来说,在 Linux 上,大多数实现kill(包括 shell 内置函数)都接受带有或不带有SIG前缀的数字或名称信号;值得注意的例外包括内置的 dash(这是基于 Debian 的发行版中的kill默认设置)和Schily Bourne Shell的内置命令。/bin/sh

\n

在您使用的工具支持的任何形式中,没有\xe2\x80\x99s 没有理由使用一种形式而不是另一种形式。我个人会避免使用数字形式,因为它们可能看起来不明确:是kill -9 -15要发送SIGTERM到进程组 9 和 15,还是SIGKILL发送到进程组 15?(它\xe2\x80\x99s是后者,但有些读者可能想知道。)我也会省略前缀,SIG因为\xe2\x80\x99s不能在任何地方被识别。

\n

请注意,POSIX 确实指定了一些数字信号值:

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
数字信号
0\xe2\x80\x9cNull\xe2\x80\x9d 信号
1HUP
2INT
3QUIT
6ABRT
9KILL
14ALRM
15TERM
\n