作用:當你在終端執行命令指令碼,當指令碼沒有執行完,如果你關閉終端,那麼跟隨這個終端有關的程序都會退出執行,nohup 命令的作用就是讓使用此命令的指令碼可以脫離終端繼續執行,不受終端退出的影響。
命令:
nohup bash shell_script.sh
nohup ./shell_script.sh
範例指令碼:shell_script.sh
列印1-20的整數,列印時間間隔為1s
#!/bin/bash
for t in {1..20}
do
sleep 1
echo $t
done
執行:
使用nohup命令執行指令碼後你會發現,此時終端處於不可互動狀態(不能輸入命令),要等待指令碼執行完才會切換為可互動。此時終端不會有列印,列印被追加重定向到指令碼所在目錄的nohup.out中去了(如果在此目錄下使用nohup命令執行多個指令碼,則nohup.out打屏紀錄檔會出現重疊,建議相同目錄執行多個指令碼的時候自己重定向,之後可以關閉終端,檢視打屏輸出可以另外開啟終端執行:tail -f nohup.out)。在此時終端ctrl+c,可停止程序,如果關閉終端,則此指令碼會繼續執行直至結束。
關閉終端後執行結果的輸出:指令碼執行完畢
在同一個目錄使用nohup執行多個指令碼:nohup.out輸出重疊
作用:在終端執行命令時,以後臺程序來執行指令碼或者命令,不會影響你接下去的命令輸入執行
命令:
bash shell_script.sh &
./shell_script.sh &
範例指令碼:shell_script2.sh
#!/bin/bash
for t in {1..20}
do
sleep 1
echo $t
done > result.txt
執行:
可以看到在執行命令:bash shell_script2.sh & 後終端還是可以互動輸入的。並沒有等到指令碼執行完才能輸入。返回的4480是後臺執行指令碼的程序號。終止此程序可以使用kill -9 4480 如果你在後臺4480程序沒有執行完前關閉此終端,則此程序會結束。這個就是和nohup命令不同的地方。
在實際使用的過程中兩個集合使用更加方便: nohup bash shell_script.sh &
當你在使用xshell 或者MobaXterm等終端模擬軟體開啟多個終端執行命令的時候就可以使用上述的命令,這樣就不會有N個視窗開啟著掛載著任務了,眼不見心不煩