Linux / Unix nohup 指令:不掛斷執行背景程式與輸出重新導向 完整教學

Linux / Unix nohup 指令:不掛斷執行背景程式與輸出重新導向 完整教學

📅 更新日期:2026-09-22 🏷️ 分類:Linux / Unix 行程管理 系統管理
💡 指令速查卡
指令名稱 nohup
指令類型 POSIX / Coreutils Utility(行程與背景管理指令)
適用環境 Linux 各發行版、macOS、Unix (AIX/Solaris)
常用頻率 ★★★★☆

在 Linux 與 Unix 作業系統環境中,nohup(No Hang Up)是用於讓程式在使用者登出(Logout)或終端機關閉後,仍然繼續在背景持續執行的強大指令。透過結合背景執行符號 & 與輸出重新導向,能有效避免 SSH 斷線導致長時間執行的任務或腳本被強制終止。

一、 基本語法與常用參數

nohup 指令在大部分 Linux / Unix 系統中的標準語法結構如下:

nohup 指令 [參數...] [&]
參數 / 符號 說明 預設值 / 必填
指令 [args] 準備在背景執行的目標程式、Shell 腳本或指令。 必填
& 放在指令結尾,讓行程直接在背景(Background)執行,不佔用當前終端機。 強烈建議
> file 將標準輸出(stdout)重新導向至指定的檔案(預設會寫入 nohup.out)。 選填
2>&1 將標準錯誤(stderr)合併導向至標準輸出,一併寫入紀錄檔中。 選填

二、 核心功能與運作原理

當您透過 SSH 遠端連線執行程式時,一旦關閉終端機或網路斷線,系統會向該 Session 內的所有行程發送 SIGHUP(Hangup)訊號,導致行程被強制終止。nohup 的核心作用就是攔截並忽略此訊號。

在日常 Linux / Unix 系統維護與開發中,`nohup` 的主要應用包括:

  • 忽略掛斷訊號:確保使用者登出或連線中斷後,背景任務仍能完整執行完畢。
  • 自動輸出導向:預設將終端機輸出內容轉存至 nohup.out,便於後續追蹤與檢視。
  • 長時間任務守護:常用於執行資料庫備份、大型專案編譯、AI 模型訓練或遠端腳本部署。

三、 實用指令範例

範例 1:基本背景執行並輸出至預設檔案

執行腳本並放入背景,輸出會自動寫入當前目錄下的 nohup.out

nohup ./long_task.sh &

範例 2:自訂日誌檔名並合併標準錯誤訊息

指定將輸出與錯誤訊息全部導向至自訂的紀錄檔中:

nohup python3 script.py > output.log 2>&1 &

範例 3:檢查與追蹤 nohup 背景行程

透過 pstail 即時檢視執行狀態與日誌:

# 尋找包含 script.py 的行程
ps -ef | grep script.py

# 即時追蹤日誌檔的最新輸出
tail -f output.log

四、 常見陷阱與注意事項

⚠️ 注意事項 1:務必在結尾加上 & 符號
若執行 nohup ./script.sh 時漏掉 &,程式雖然不會因斷線而終止,但它會佔據前台(Foreground),導致終端機無法輸入其他指令。
⚠️ 注意事項 2:確認當前目錄具備寫入權限
如果執行目錄沒有寫入權限,nohup 將無法建立 nohup.out 檔案,並可能導致指令直接執行失敗。建議明確指定輸出路徑(例如 > /tmp/output.log)。
💡 小技巧:如何安全終止背景執行的行程?
若背景任務需要提前結束,可先用 ps -ef | grep 關鍵字 找到對應的 Process ID (PID),然後執行 kill PID(或強制終止 kill -9 PID)。

五、 相關指令推薦

  • screen / tmux:終端機多工復用工具,提供更完整的虛擬視窗與背景工作管理方案。
  • jobs:列出當前 Shell Session 中執行的背景工作列表與編號。
  • bg / fg:將暫停(Ctrl+Z)的工作切換至背景繼續執行或帶回前景。

六、 參考資源與官方文件

如需進一步瞭解 GNU Coreutils nohup 指令與行程管理細節:

留言

相關文章 / 薪資情報

文章載入中...

你可能有興趣

精選文章 / 推薦情報

文章載入中...