SSH會(huì)話結(jié)束后保持進(jìn)程運(yùn)行

1. 在Linux/Unix中,有這樣幾個(gè)概念


進(jìn)程組(process group):

? ? ? 一個(gè)或多個(gè)進(jìn)程的集合,每一個(gè)進(jìn)程組有唯一一個(gè)進(jìn)程組ID,即進(jìn)程組長進(jìn)程的ID。

會(huì)話期(session):

? ? ? 一個(gè)或多個(gè)進(jìn)程組的集合,有唯一一個(gè)會(huì)話期首進(jìn)程(session leader)。會(huì)話期ID為首進(jìn)程的ID。會(huì)話期可以有一個(gè)單獨(dú)的控制終端(controlling terminal)。與控制終端連接的會(huì)話期首進(jìn)程叫做控制進(jìn)程(controlling process)。當(dāng)前與終端交互的進(jìn)程稱為前臺進(jìn)程組。其余進(jìn)程組稱為后臺進(jìn)程組。

2. POSIX.1 定義


1. 掛斷信號(SIGHUP)默認(rèn)的動(dòng)作是終止程序。

2. 當(dāng)終端接口檢測到網(wǎng)絡(luò)連接斷開,將掛斷信號發(fā)送給控制進(jìn)程(會(huì)話期首進(jìn)程)。

3. 如果會(huì)話期首進(jìn)程終止,則該信號發(fā)送到該會(huì)話期前臺進(jìn)程組。

4. 一個(gè)進(jìn)程退出導(dǎo)致一個(gè)孤兒進(jìn)程組中產(chǎn)生時(shí),如果任意一個(gè)孤兒進(jìn)程組進(jìn)程處于STOP狀態(tài),發(fā)送SIGHUP和SIGCONT信號到該進(jìn)程組中所有進(jìn)程。

5. 因此當(dāng)網(wǎng)絡(luò)斷開或終端窗口關(guān)閉后,控制進(jìn)程收到SIGHUP信號退出,會(huì)導(dǎo)致該會(huì)話期內(nèi)其他進(jìn)程退出。

3. 解決方式


? ? ? 如果我們可以忽略SIGHUP信號,關(guān)掉窗口應(yīng)該就不會(huì)影響程序的運(yùn)行了。nohup命令可以達(dá)到這個(gè)目的,如果程序的標(biāo)準(zhǔn)輸出/標(biāo)準(zhǔn)錯(cuò)誤是終端,nohup默認(rèn)將其重定向到nohup.out文件。值得注意的是nohup命令只是使得程序忽略SIGHUP信號,還需要使用標(biāo)記&把它放在后臺運(yùn)行。

nohup [argument…] &

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容