為什麼透過 exit 關閉終端機後命令仍繼續運作?

為什麼透過 exit 關閉終端機後命令仍繼續運作?

為什麼當我command & exit在終端機中執行時(例如vimiv & exit維米夫終端關閉時繼續運轉?我期望維米夫在目前終端機中作為後台作業啟動,然後接收嘆氣當終端關閉並退出時。例如,如果我執行vimiv &另一個exit命令,維米夫將關閉

答案1

我希望 vimiv 在當前終端機中作為後台作業啟動,然後在終端關閉並退出時收到一個嘆息。

不,事實並非如此。如果它是一個訊號vimiv,則只會SIGHUP(從核心)獲得一個訊號前景工作,或者如果它是一份停止了後台工作。但兩者都不是:它是一個正在運行的後台作業。

或者,如果 bash(特別是 bash,而不是一般的任何 shell)本身收到了一個SIGHUP訊號,並將其重新發送給所有非否認的作業。但在您的範例中,shell 通過 正常退出exit,而不是因為它是由SIGHUP[1] 發出信號的。

例如,如果我執行vimiv &後跟另一個exit命令,vimiv將關閉

vimiv &這對於該程式來說可能有些特殊——如果我輸入xclock &然後exit在終端機中的單獨一行上輸入,xclock則不會終止。但是,如果我通過按鈕關閉終端X,它將終止,因為在這種情況下bash將收到SIGHUP信號並將其重新發送到xclock.

[1] bashSIGHUP正常退出時也可以發送 a,但只能使用shopt -s huponexit,這不是預設的。

相關內容