SSH會話結束后保持進程運行

1. 在Linux/Unix中,有這樣幾個概念


進程組(process group):

? ? ? 一個或多個進程的集合,每一個進程組有唯一一個進程組ID,即進程組長進程的ID。

會話期(session):

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

2. POSIX.1 定義


1. 掛斷信號(SIGHUP)默認的動作是終止程序。

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

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

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

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

3. 解決方式


? ? ? 如果我們可以忽略SIGHUP信號,關掉窗口應該就不會影響程序的運行了。nohup命令可以達到這個目的,如果程序的標準輸出/標準錯誤是終端,nohup默認將其重定向到nohup.out文件。值得注意的是nohup命令只是使得程序忽略SIGHUP信號,還需要使用標記&把它放在后臺運行。

nohup [argument…] &

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

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

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