題 在Linux上我可以保持程序在後台運行,即使我斷開連接後?


如果我登錄到遠程Linux機器,我知道我可以暫停進程(cntr-z)並將其移至後台(bg 1),但如果我從機器斷開連接,則進程停止。

有沒有辦法讓我把它留在後台並在我重新登錄時將它放在那裡?這是一個非常漫長的過程。

在Ubuntu上,通過SSH登錄。


4
2018-06-27 16:22


起源




答案:


這是因為你的程序需要終端運行,你可以使用 GNU屏幕 創建一個虛擬終端,以便即使斷開連接後程序仍將繼續運行。
趕緊跑 screen your_program_name,你可以關閉屏幕 crtl-a-d 然後用它重新打開它 screen -rx


9
2018-06-27 16:27



希望我接受你的回答,但是我發布了沒有登錄,現在實際上無法提出問題。 = x但是謝謝你,完美地運作。 - Erik


比屏幕更不靈活 nohup 和 disown

nohup 是一個程序,你必須像這樣啟動長期運行的jub:

$ nohup longjob --options-for-longjob

這將導致你的長期工作在後台運行 沒有附加到任何終端 (這意味著你不會在屏幕上獲得任何輸出,也無法從鍵盤直接輸入)

disown 是一個bash內置,可以斷開長時間運行的作業  你已經開始了。我的bash手冊頁說

disown [-ar] [-h] [jobspec ...]
                沒有選項,每個jobspec都從表中刪除                 積極的工作。如果給出-h選項,則不是每個jobspec                 從表中刪除,但標記為不發送SIGHUP                 如果shell收到一個SIGHUP就可以了。如果沒有jobspec                 現在,既不提供-a也不提供-r選項                 當前的工作被使用。如果未提供jobspec,則使用-a選項                 意味著刪除或標記所有工作;沒有工作的-r選項 -                 spec參數將操作限制為正在運行的作業。回報                 除非jobspec未指定有效作業,否則value為0。


6
2018-06-27 17:25