註銷後保持linux程序執行
我正在通過 SSH 連接到 Linux 機器,並且正在嘗試執行一個繁重的 bash 腳本來進行文件系統操作。它預計會持續執行數小時,但由於我遇到的網際網路連接問題,我無法讓 SSH 會話保持打開狀態。
我懷疑使用後台運算符執行腳本和符號 (
&
) 是否會成功,因為我嘗試過,後來發現該過程沒有完成。如何註銷並保持程序執行?
最好的方法是在終端多路復用器中啟動程序。或者,您可以使程序不接收 HUP 信號。
終端多路復用器提供獨立於“真實”終端執行的“虛擬”終端(實際上今天所有終端都是“虛擬”的,但這是另一天的另一個話題)。即使您的真實終端因您的 ssh 會話而關閉,虛擬終端也會繼續執行。
從虛擬終端啟動的所有程序將繼續使用該虛擬終端執行。當您重新連接到伺服器時,您可以重新連接到虛擬終端,除了經過的時間之外,一切都好像什麼都沒發生一樣。
螢幕有一個陡峭的學習曲線。這是一個很好的教程,其中包含解釋概念的圖表:http: //www.ibm.com/developerworks/aix/library/au-gnu_screen/
當終端關閉時,終端將HUP信號(或 SIGHUP)發送到其所有子程序。收到 SIGHUP 後的常見操作是終止。因此,當您的 ssh 會話斷開連接時,您的所有程序都將終止。為避免這種情況,您可以使您的程序不接收 SIGHUP。
有關如何
nohup
和disown
工作的更多資訊,請閱讀此問題和答案:https ://unix.stackexchange.com/questions/3886/difference-between-nohup-disown-and注意:儘管程序將繼續執行,但您無法再與它們互動,因為它們不再連接到任何終端。此方法主要適用於長時間執行的批處理,一旦啟動,就不再需要任何使用者輸入。