我正在伺服器上運行命令。它帶有這個庫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;這就是disown
shell 內建函數的用途(另請注意,有一個huponexit
shell 選項,當互動式登入 shell 退出時,該選項會導致將 SIGHUP 傳送到所有作業)。
如果您希望在再次登入後將終端重新連接到進程組,您可能需要使用具有此功能的包裝器;終端多工器等screen
具有此功能。