退出 shell,進程在前台運行

退出 shell,進程在前台運行

我有一個在前台運行的進程。我想知道是否可以退出 Bash,

  1. (當然)不會像往常一樣殺死前台進程並退出,並且
  2. 無需終止終端程序,或如果連接是透過客戶端(如 iTerm2 或 PuTTY)進行遠端連接,則無需終止所述客戶端。

我知道如果我沒有運行前台進程,我可以透過 Ctrl-d 或發出 輕鬆發送傳輸結束exit。我想知道這在前台進程運行時是否可行。

答案1

前台進程意味著伺服器以下屬性,並且這些屬性與終端綁定。

  • 與使用者互動。
  • 將文字輸入提供給主偽設備,供連接到從屬偽設備的 shell(例如 bash)使用。
  • 從主偽設備讀取文字輸出並將其顯示給使用者。

所以我認為這是不可能的。或者將您的進程作為守護程序運行,並將輸出提供給特定的終端和/或文件,就像安裝過程一樣。

答案2

除了screen/tmux還有nohup.它更簡單,但有時更好,具體取決於您的具體情況。看這裡:nohup 與 Screen更多細節。

請注意,這nohup將使進程保持在前台,但您將無法與其互動或查看終端上的輸出。若要在背景啟動進程,請&在啟動進程時新增(即nohup <your command here> &)。

如果進程已經在運行,您可以按(停止進程)然後按命令(將停止的進程發送到後台)nohup重新獲得對終端的存取權限。Ctrl+Zbg

編輯(在OP評論之後):我不確定我是否理解這個場景,但也許你可以嘗試:

  1. 打開終端機視窗(一些 shell 將在裡面啟動)
  2. 在該視窗內明確啟動另一個 shell(例如 bash)
  3. 在第二個 shell 中啟動前台進程(沒有任何nohups 等)
  4. 打開另一個終端機窗口
  5. 識別“中間”shell(它將是被測試進程的父進程)
  6. 向「中間」shell 發送終止訊號。

這會將測試的進程變成“半守護程序”,並讓您可以存取第一個終端視窗中的頂級 shell。請注意,測試的進程仍然附加到終端,因此當您關閉視窗時它將終止。

相關內容