Linux

通過“kill”命令發送信號名稱的正確或建議方法是什麼?

  • May 18, 2022

我閱讀了很多關於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前綴的數字或名稱;值得注意的例外包括killdash 的內置函式,它是/bin/sh基於 Debian 的發行版中的預設值,以及Schily Bourne Shell的內置函式。

在您使用的工具支持的任何形式中,沒有“強制性”理由使用一種形式而不是另一種形式。我個人會避免使用數字形式,因為它們可能看起來不明確:kill -9 -15打算發送SIGTERM到流程組 9 和 15,還是SIGKILL發送到流程組 15?(是後者,但有些讀者可能想知道。)我也會省略SIG前綴,因為它在任何地方都無法辨識。

請注意,POSIX 確實指定了一些數字信號值:

數字信號
0“空”信號
1HUP
2INT
3QUIT
6ABRT
9KILL
14ALRM
15TERM

引用自:https://unix.stackexchange.com/questions/702910