nohup(No Hang UP)讓程式忽略 SIGHUP 訊號,在終端關閉、SSH 斷線後持續運行。本文涵蓋基本用法、輸出處理、常見坑(關閉終端方式)、jobs/fg/bg 作業控制與替代方案。
nohup 命令 [參數] &
& 放入背景執行nohup.out(當前目錄或 $HOME)nohup /root/test.php &
提示 appending output to nohup.out,輸出記錄於 nohup.out。
nohup command > myout.file 2>&1 &
錯誤做法:執行 nohup ... & 後直接點視窗關閉按鈕(X)。
正確做法:見到提示後,按任意鍵回到 Shell 提示符,輸入 exit 正常登出。
原因:直接關視窗會發送 SIGHUP 給前景 Shell,導致其子進程(含 nohup 進程)被清理;exit 則正常釋放 Session。
| 命令 | 說明 |
|---|---|
jobs | 列出背景/暫停作業 |
fg %n | 將作業 n 調至前景 |
bg %n | 將暫停作業 n 放入背景繼續 |
Ctrl+Z | 暫停前景作業 |
Ctrl+C | 終止前景作業 |
kill %n | 終止作業 n |
jobs 輸出中 + 表示預設作業(fg/bg 不加參數操作的對象),- 表示次預設。
screen / tmux:虛擬終端,可隨時重掛,功能更強systemd-run --user --scope command:現代 systemd 方式disown -h %n:將作業從 Shell 作業表移除,不再接收 SIGHUPnohup.out 會無限增長,建議定期清理或用 logrotate掌握 nohup 正確用法與作業控制,是 Linux 遠端運維長時間任務的基礎技能。