Linux
通過“kill”命令發送信號名稱的正確或建議方法是什麼?
我閱讀了很多關於
kill
命令使用的教程,主要是3 種方法kill -15 <pid> kill -SIGTERM <pid> kill -TERM <pid>
出於腳本目的和 macos 的可移植性,將不會使用程式碼編號。因為
kill -l
在 macos 中與 Linux 不同。所以在這裡輸入信號名稱。問題
- 通過命令發送信號名稱的正確或建議方法是什麼?
kill
我是說:
- SIG什麼或什麼?
為什麼?這兩種方法的存在是有原因的,對吧?是否有強制理由使用一種方法而不是另一種方法?
環境
這種情況適用於 Ubuntu Desktop/Server 和 Fedora Workstation/Server
最便攜的變體是
kill -s TERM -- …
這是POSIX 中指定的形式,沒有副檔名:
-s
後跟信號的名稱,如 中所定義,signal.h
沒有SIG
前綴,或 0 表示“空”信號(用於檢查具有給定標識符的程序是否存在)。
SIGTERM
是預設信號,因此可以使用以下規範形式將其發送到程序或程序組:kill <pid> kill -- -<pgid>
一般來說,在 Linux 上,大多數實現
kill
(包括 shell 內置)都接受信號作為帶有或不帶SIG
前綴的數字或名稱;值得注意的例外包括kill
dash 的內置函式,它是/bin/sh
基於 Debian 的發行版中的預設值,以及Schily Bourne Shell的內置函式。在您使用的工具支持的任何形式中,沒有“強制性”理由使用一種形式而不是另一種形式。我個人會避免使用數字形式,因為它們可能看起來不明確:
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