退出 ssh 並且命令仍在運行?

退出 ssh 並且命令仍在運行?

我正在伺服器上運行命令。它帶有這個庫http://www.graphicsmagick.org/

基本上我有一個 for 循環,可以對很多文件進行圖像處理。

命令運行數小時並將運行數小時。我想知道,我可以退出 ssh 並仍然在遠端電腦上運行這些命令嗎?退出 ssh 是否會發送一些訊號來結束目前命令的執行?

我注意到的另一件事......雖然我正在遠端運行命令,但我的筆記型電腦過熱。活動監視器顯示 bash 正在使用 70% 的 cpu。我用的是 MacBook Pro

現在這很奇怪。遠端命令如何對本機造成壓力?

答案1

一個解決方案是在命令前面加上nohup.這告訴電腦忽略「掛斷」訊號(例如退出 ssh 會話)。這可能不適用於for循環。

另一個好的解決方案(也是我個人最喜歡的方法)是安裝「screen」套件。screen提供一個虛擬終端,可以透過按 斷開連接,使進程保持運作CTRL + A , D。稍後可以使用 重新連接螢幕screen -r

答案2

當具有關聯控制終端(在您的情況下)的會話領導者bash退出時,作業系統會向前台進程組(前台作業)中的所有進程發送 SIGHUP。此外,bash預設情況下,將 SIGHUP 傳送至其所有正在執行或已停止的作業(已停止的作業也會傳送 SIGCONT)。現在,收到 SIGHUP 後的預設操作是進程終止。

有幾種方法可以讓進程在bash退出後繼續運行。首先,你可以讓你的進程免受 SIGHUP 的影響;這就是該nohup命令的作用。其次,可以將相應的進程組後台化,並指示bash不要向其發送SIGHUP;這就是disownshell 內建函數的用途(另請注意,有一個huponexitshell 選項,當互動式登入 shell 退出時,該選項會導致將 SIGHUP 傳送到所有作業)。

如果您希望在再次登入後將終端重新連接到進程組,您可能需要使用具有此功能的包裝器;終端多工器等screen具有此功能。

相關內容