Shell

後台工作去哪兒了?

  • December 19, 2011

從 gnome-terminal 我知道可以使用 Cz 暫停作業,然後將其發送到後台。當我關閉終端時,過程並沒有結束。工作是從哪裡管理的,還是失去了?

您的後台作業會繼續執行,直到有人通過發送信號告訴它停止。它可能會以幾種方式死亡:

  • 當終端因任何原因離開時,它會發送一個HUP 信號(“掛斷”,如調製解調器掛斷)到在其內部執行的 shell(更準確地說,發送到控制程序)和前台程序組中的程序。因此,在後台執行的程序不會受到影響,但是……
  • 當 shell 接收到 HUP 信號時,它會將其傳播到後台作業。所以如果後台程序沒有忽略這個信號,它就會在此時死掉。
  • 如果程序在離開後嘗試從終端讀取或寫入,則讀取或寫入將失敗並出現輸入/輸出錯誤 (EIO)。然後程序可能決定退出。
  • 當然,您(或您的系統管理員)可以隨時決定終止該程序。

如果您關心的是保持程序執行,那麼:

  • 如果程序可能與終端互動,請使用ScreenTmux在虛擬終端中執行程序,您可以隨意斷開和重新連接。
  • 如果程序只需要繼續執行而不是互動式的,請使用nohup命令 ( nohup myprogram --option somearg) 啟動它,這可以確保 shell 不會向它發送 SIGHUP,將標準輸入/dev/null重定向到並將標準輸出和標準錯誤重定向到名為nohup.out.
  • 如果您已經啟動了程序並且不希望它在您關閉終端時死掉,請執行disown內置程序(如果您的 shell 有一個)。如果沒有,您可以通過以極端偏見殺死 shell(kill -KILL $$從該 shell 中繞過指定程序具有的任何退出觸發器)來避免 shell 傳播 SIGHUP。
  • 如果您已經啟動了該程序並想將其重新連接到另一個終端,有一些方法,但它們不是 100% 可靠的。請參閱如何取消正在執行的程序並將其關聯到新的螢幕外殼?和相關的問題。

引用自:https://unix.stackexchange.com/questions/24894