什麼是 nohup 命令?
nohup,是 “no hang up” 的縮寫,是 Linux 系統中的一個標準命令。它的核心功能是允許進程在啓動它的 shell 或終端退出後仍能繼續運行。nohup 通過阻止進程或作業接收 SIGHUP(掛斷信號)來實現這一點。SIGHUP 信號通常會在關閉或退出終端時發送給所有相關進程,導致它們終止。
nohup 命令語法與版本檢查
基本語法
nohup 命令的語法非常直觀:
nohup command [arguments]
或者,當不帶任何參數執行時,通常用於查看其用法:
nohup [options]
檢查 nohup 版本
您可以使用 --version 參數來查看 nohup 命令的版本信息:
nohup --version
使用 nohup 啓動進程
要使您的進程或作業即使在您退出 shell 或終端後也能繼續運行,只需在命令前加上 nohup。這樣,作業將繼續在後台運行,而不會被終止。
例如,我們創建一個簡單的 Bash 腳本 hello.sh:
#!/bin/bash
echo "Hello World!"
然後使用 nohup 運行此腳本:
nohup ./hello.sh
默認情況下,nohup 命令的標準輸出(stdout)和標準錯誤(stderr)會被重定向到當前目錄下的一個文件,通常是 nohup.out。您可以查看此文件來驗證輸出:
cat nohup.out
自定義輸出重定向
如果您希望將輸出保存到其他文件中,可以使用重定向操作符 >:
nohup ./hello.sh > output.txt
要將標準錯誤(stderr)也重定向到與標準輸出(stdout)相同的文件,請使用 > filename 2>&1 參數。這裏的 2>&1 表示將文件描述符 2(stderr)重定向到文件描述符 1(stdout)所指向的位置:
nohup ./hello.sh > myoutput.txt 2>&1
將進程放入後台
通常,我們希望 nohup 啓動的進程在後台運行,而不是阻塞當前的終端。這可以通過在命令末尾添加 & 符號來實現:
nohup command arguments &
例如,在後台持續 ping google.com:
nohup ping google.com &
檢查和終止後台進程
要檢查進程是否在後台運行(即使重新啓動 shell 後),可以使用 pgrep 命令配合其 -a 參數(顯示完整命令行):
pgrep -a ping
如果您想停止或殺死正在運行的進程,請使用 kill 命令,後跟進程 ID (PID)。請注意,這裏的 2565 只是一個示例 PID,您需要根據實際情況替換為查詢到的 PID:
kill 2565
nohup、screen 和 tmux 的詳細比較
在 Linux 中,除了 nohup 之外,還有 screen 和 tmux 這類更高級的工具可以實現會話持久化。理解它們之間的差異對於選擇合適的工具至關重要。
-
nohup:- 特點:一個基本實用程序,主要用於運行即使在用户註銷後也需要持久存在的命令。它通過使命令不受 SIGHUP 信號影響來實現此目的。
nohup還會將標準輸出和標準錯誤重定向到nohup.out文件(如果未另外指定)。 - 優點:使用簡單,開銷很低,適用於簡單的長時間運行任務,如腳本或單個應用程序的後台運行。
- 缺點:不提供交互性、會話管理功能或多窗口支持。一旦啓動,無法重新連接到該會話進行交互。
- 特點:一個基本實用程序,主要用於運行即使在用户註銷後也需要持久存在的命令。它通過使命令不受 SIGHUP 信號影響來實現此目的。