當執行 Linux 指令時, 會在終端機一直執行, 直到指令完成後才會結束, 並給使用者重新輸入指令。而 nohup 指令就可以讓指令在背景執行, 不會影響使用者的正常工作。例如要將一些體積較大的檔案 rsync 到遠端伺服器, 用 nohup 指令便可以一邊 rsync 一邊完成手邊的工作。
有關 nohup
nohup 的全寫是 “no hangup”, HUP hangup (HUP) 訊號會在使用者登出時, 系統向 process 發出, 通知 process 結束, 但透過 nohup 執行的指令, nohup 會將 HUP 訊息截取, 讓指令可以繼續執行。
nohup 使用方法
nohup 的使用方法十分簡單, 只要在 nohup 後面加上要執行的指定, 然後再加上一個背景執行的 “&” 字符, 例如:
$ nohup your-command &
nohup 預設會將指令的輸出放到 nohup.out 的檔案, 如果需要自訂重新導向的檔案, 可以用以下方法將輸出重新導向到檔案, 例如:
$ nohup your-domain > nohup.log 2>&1 &
這樣就會將指令的輸出放到 nohup.log 內。
查看及終止 nohup
由於 nohup 將指令放到背景執行, 要查看或終止 nohup 便要先取得 nohup 執行指令的 pid, 再用 kill 掉:
查看 nohup 執行的指令:
$ jobs -l
輸出的結果第二欄是 pid, 最後一欄是 nohup 及執行的指令, 將要終止執行的 pid 記下, 再用 kill 指令終止 nohup 執行, 例如 pid 是 12345:
$ kill -9 12345
cool