
我有一個在前台運行的進程。我想知道是否可以退出 Bash,
- (當然)不會像往常一樣殺死前台進程並退出,並且
- 無需終止終端程序,或如果連接是透過客戶端(如 iTerm2 或 PuTTY)進行遠端連接,則無需終止所述客戶端。
我知道如果我沒有運行前台進程,我可以透過 Ctrl-d 或發出 輕鬆發送傳輸結束exit
。我想知道這在前台進程運行時是否可行。
答案1
前台進程意味著伺服器以下屬性,並且這些屬性與終端綁定。
- 與使用者互動。
- 將文字輸入提供給主偽設備,供連接到從屬偽設備的 shell(例如 bash)使用。
- 從主偽設備讀取文字輸出並將其顯示給使用者。
所以我認為這是不可能的。或者將您的進程作為守護程序運行,並將輸出提供給特定的終端和/或文件,就像安裝過程一樣。
答案2
除了screen
/tmux
還有nohup
.它更簡單,但有時更好,具體取決於您的具體情況。看這裡:nohup 與 Screen更多細節。
請注意,這nohup
將使進程保持在前台,但您將無法與其互動或查看終端上的輸出。若要在背景啟動進程,請&
在啟動進程時新增(即nohup <your command here> &
)。
如果進程已經在運行,您可以按(停止進程)然後按命令(將停止的進程發送到後台)nohup
重新獲得對終端的存取權限。Ctrl+Z
bg
編輯(在OP評論之後):我不確定我是否理解這個場景,但也許你可以嘗試:
- 打開終端機視窗(一些 shell 將在裡面啟動)
- 在該視窗內明確啟動另一個 shell(例如 bash)
- 在第二個 shell 中啟動前台進程(沒有任何
nohup
s 等) - 打開另一個終端機窗口
- 識別“中間”shell(它將是被測試進程的父進程)
- 向「中間」shell 發送終止訊號。
這會將測試的進程變成“半守護程序”,並讓您可以存取第一個終端視窗中的頂級 shell。請注意,測試的進程仍然附加到終端,因此當您關閉視窗時它將終止。