
為什麼當我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
,這不是預設的。