Bash

kill -9 後台工作也會殺死 bash

  • August 3, 2021
sleep 1 & kill -9 $?

以上將殺死(很可能)bash shell 或目前終端視窗。

這是為什麼?


注意:sleep 1 & kill $?不會殺死外殼/終端。

只是為了確保我不會執行我認為的不同的東西,有一些競爭條件等,以下也會產生相同的效果:

/bin/sleep 2 & pid=$?; sleep 1; kill -9 $pid

GNU bash,版本 5.0.3(1)-發布

$?是最後一個命令的退出狀態。啟動後台命令總是成功的,所以在 中… & do_something_with $?, 的值為$?0。你正在執行kill -9 0

傳遞給 shell 命令的 PIDkill被傳遞給底層系統呼叫。Shell 手冊沒有記錄它可以是 PID 以外的東西,但係統呼叫手冊卻有。如果 PID 為 0,則表示目前程序組中的所有程序。(並且 -1 表示除 PID 1 之外的每個程序,另一個負值表示指定程序組中的每個程序。)在終端中執行的 shell 位於其自己的程序組中(除非您經過大量的循環或存在子 shell不在後台作業中),因此kill -9 0相當於kill -9 $$:它殺死了 shell 程序。

任何後台程序,例如sleep命令,都會繼續執行。它沒有收到信號,外殼甚至沒有機會發送信號。終端的當機通常也不會影響它,儘管某些程序在嘗試寫入已關閉的終端時可能會出錯(​​當然sleep不會這樣做)。

kill 0發送 TERM 信號,shell 忽略該信號。kill -9 0發送 KILL 信號,不可忽略。


如果您打算殺死最近的後台程序,那就是$!.

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