在 Linux 中,nohup
命令用于在用戶退出登錄后繼續運行指定的命令或腳本。默認情況下,nohup
會忽略掛起信號(SIGHUP),以防止進程在終端關閉時被終止。以下是如何使用 nohup
命令以及相關配置的詳細說明:
nohup
基本語法nohup command [arguments] &
command
:要運行的命令或腳本。[arguments]
:傳遞給命令的參數(可選)。&
:將命令放入后臺運行。假設你想在后臺運行一個名為 my_script.sh
的腳本:
nohup ./my_script.sh &
執行上述命令后,my_script.sh
將在后臺運行,即使你關閉終端或注銷,它也會繼續執行。
nohup
默認會將命令的標準輸出和標準錯誤輸出重定向到當前目錄下的 nohup.out
文件。你可以自定義輸出文件的位置和名稱:
nohup ./my_script.sh > output.log 2>&1 &
> output.log
:將標準輸出重定向到 output.log
文件。2>&1
:將標準錯誤輸出重定向到標準輸出,即同樣寫入 output.log
。&
:將命令放入后臺運行。默認情況下,nohup
已經忽略掛起信號(SIGHUP),這意味著即使終端關閉,進程也不會被終止。然而,如果你希望顯式地忽略 SIGHUP 或其他信號,可以使用 disown
命令或信號處理機制。
disown
在后臺運行命令后,可以使用 disown
命令將其從當前 shell 的作業表中移除,從而忽略 SIGHUP:
nohup ./my_script.sh &
disown
或者,可以在啟動命令時直接使用 nohup
和 &
,然后使用 disown
:
./my_script.sh &
nohup disown
如果你需要在腳本中顯式地忽略 SIGHUP,可以使用 trap
命令:
#!/bin/bash
# 忽略 SIGHUP
trap '' SIGHUP
# 你的命令或邏輯
while true; do
echo "腳本正在運行..."
sleep 10
done
保存上述腳本為 my_script.sh
,然后使用 nohup
運行:
nohup ./my_script.sh &
你可以使用以下命令查看當前后臺運行的進程:
jobs
或者使用 ps
命令:
ps aux | grep my_script.sh
如果你需要終止一個使用 nohup
運行的后臺進程,可以使用 kill
命令:
kill -9 <PID>
其中 <PID>
是進程的進程 ID。你可以使用 ps
命令找到進程 ID:
ps aux | grep my_script.sh
nohup
命令可以在退出登錄后繼續運行命令或腳本。nohup
默認忽略 SIGHUP 信號,確保進程不會因終端關閉而被終止。disown
命令可以將進程從當前 shell 的作業表中移除,進一步確保進程不會因終端關閉而被終止。trap
命令可以顯式地忽略特定信號。希望這些信息對你有所幫助!如果有更多問題,請隨時提問。