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