對於遠端 ssh 登入 Linux 的使用者來說,若遇到程式需要跑很久的情況(例如 scp
傳輸大檔案),通常只能乖乖等它執行完,若跑到一半不幸連線中斷,程式只能重跑一次,造成大量的時間被浪費。
幸好 Linux 有提供 nohup
指令讓我們可以在 ssh 連線登出後,程式照樣能繼續執行。
一般 Linux 使用者登出後,他執行的所有程式都會收到 SIGHUP (SIGnup Hang UP)訊號,正常程式收到 SIGHUP 就會立刻停止執行。
nohup
(字面意思 No Hang Up)可以讓程式忽略 SIGHUP
,所以當使用者斷線或登出時,程式可以繼續執行,不會受到影響。
使用方法
假設原本你想用 scp /path/to/my/file brian@123.123.123.123:/home/brian
將一個大檔案複製到遠端機器,你可以將指令改成 nohup scp /path/to/my/file brian@123.123.123.123:/home/brian &
來執行,指令尾端的 &
代表nohup
會在背景,避免卡住你現在執行的 ssh 視窗。
觀察輸出結果
既然有程式在執行,那麼你一定會想看執行的結果。 nohup
預設會將所有的輸出資訊寫到 nohup.txt
這個檔案,你可以用 cat nohup.txt
查看程式輸出資訊,或是用 tail -f nohup.txt
即時查看最後輸出的幾筆資料。