您好,登錄后才能下訂單哦!
背景
一直沒搞清楚 nohup 與 & 的區(qū)別, 看著公司里遺留的shell, 也就稀里糊涂地用著… 這是很糟糕的態(tài)度
結論放前面
&
使進程在后臺運行, 默認輸出到標準輸出(即當前屏幕), 除非重定向輸出.
此時忽略 SIGINT 信號.
若關閉會話, 則進程會結束
nohup
進程仍舊在前臺跑, 默認輸出到 nohup.out .
此時進程忽略 SIGHUP 信號, 關閉會話不影響進程.
Ctrl+c會使進程中斷
nohup + &
進程在后臺跑, 忽略 SIGINT, SIGHUP 信號.
測試
repeat=${1:-20}
echo 循環(huán)次數 $repeat
counter=0
while [ $counter -lt
r
e
p
e
a
t
]
d
o
e
c
h
o
第
repeat ] do echo 第
r
e
p
e
a
t
]
d
o
e
c
h
o
第
{counter}次循環(huán)
let “counter ++”
sleep 1
done
echo 結束循環(huán)
直接運行
[root@linuxidc tmp]# sh
test.sh
循環(huán)次數 20
第0次循環(huán)
第1次循環(huán)
第2次循環(huán)
^C
此時不論是直接 Ctrl+c 或 關閉當前ssh連接, 都會導致進程停止
[root@linuxidc tmp]# sh
test.sh
> test.out
^C
此時進程仍在前端跑, 查看 test.out 文件會發(fā)現在輸出, 此時不論是直接 Ctrl+C 或 關閉當前ssh連接, 都會導致進程停止
單獨使用 &
[root@linuxidc tmp]# sh
test.sh
&
[1] 111418
[root@linuxidc tmp]# 循環(huán)次數 20
第0次循環(huán)
第1次循環(huán)
第2次循環(huán)
^C
[root@linuxidc tmp]# 第3次循環(huán)
第4次循環(huán)
第5次循環(huán)
^C
[root@linuxidc tmp]# 第6次循環(huán)
第7次循環(huán)
第8次循環(huán)
第9次循環(huán)
第10次循環(huán)
第11次循環(huán)
此時進程在后臺跑, 同時默認會輸出到屏幕上.
此時 Ctrl+c 無效, 即進程忽略了 SIGINT 信號.
但若是直接關閉ssh連接(會話), 則該進程會被關閉, 這是因為進程受到了 SIGHUP 信號影響.
系統(tǒng)對SIGHUP信號的默認處理是終止收到該信號的進程。所以若程序中沒有捕捉該信號,當收到該信號時,進程就會退出。
[root@linuxidc tmp]# sh
test.sh
> test.out &
[4] 111758
[root@linuxidc tmp]# http://www.iis7.com/a/lm/ftp/
使進程在后臺跑, 輸出被重定向到指定文件
可用 jobs -l 獲取當前的所有后臺進程
[root@linuxidc tmp]# jobs -l
[2]+ 113043 Running sh
test.sh
> /dev/null &
單獨使用 nohup
[root@linuxidc tmp]# nohup sh
test.sh
> test.out 2>&1
運行后是在前端跑, 若關閉會話, 進程不受影響.
但此時 Ctrl+c會結束進程.
nohup + &
[root@linuxidc tmp]# nohup sh
test.sh
&
[2] 112987
[root@linuxidc tmp]# nohup: 忽略輸入并把輸出追加到"nohup.out"
[root@linuxidc tmp]#
忽略 Ctrl+c 以及 會話關閉的影響, 進程可以在后臺持續(xù)運行.
若會話未關閉, 可通過 jobs -l 查看當前該進程
[root@linuxidc tmp]# jobs -l
[1]+ 112987 Running nohup sh
test.sh
&
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。