![用於作業控制的「kill」指令與向行程發送訊號的「kill」指令相同嗎?](https://rvso.com/image/122421/%E7%94%A8%E6%96%BC%E4%BD%9C%E6%A5%AD%E6%8E%A7%E5%88%B6%E7%9A%84%E3%80%8Ckill%E3%80%8D%E6%8C%87%E4%BB%A4%E8%88%87%E5%90%91%E8%A1%8C%E7%A8%8B%E7%99%BC%E9%80%81%E8%A8%8A%E8%99%9F%E7%9A%84%E3%80%8Ckill%E3%80%8D%E6%8C%87%E4%BB%A4%E7%9B%B8%E5%90%8C%E5%97%8E%EF%BC%9F.png)
在 Linux 中,您可以執行以下操作:
kill 1
(或kill %1
)
這意味著「關閉進程工作編號 1」。
您可以執行以下操作:
kill 1234
這意味著「將SIGTERM
訊號傳送到PID為1234的進程」。
這兩個kill
命令是同一個命令,還是兩個不同的命令?
答案1
我不確定你能做到kill 1
(或者更確切地說,你可以嘗試,但你不會被允許這樣做,除非你的根,然後你會感到驚訝)。1
這裡總是指 id 為 1 的進程,通常是init
(或其某些變體)。
為了真正回答你的問題,如果你使用的 shell 支援作業控制,那麼kill
shell 將會內置,處理這兩種情況(管理作業和進程)。請參閱範例巴什的kill
命令。
如果您使用的 shell 不支援作業控制(有嗎?),kill
則通常是系統中的二進位檔案/bin/kill
;參見例如util-linux
的kill
命令。即使在具有內建kill
命令的 shell 中,您也可以透過指定其完整路徑來存取該命令。該kill
命令也可以在沒有 shell 的情況下存取(用於從另一個程式使用)。
也可以看看POSIX 的定義kill
,它涵蓋了這兩種情況(但沒有指定在哪裡實現什麼)。