原創 Linux 中的 nohup 與

2022-04-28 18:39:09 字數 2262 閱讀 3427

目錄測試

一直沒搞清楚nohup&的區別, 看著公司裡遺留的shell, 也就稀里糊塗地用著... 這是很糟糕的態度

使程序在後台執行, 預設輸出到標準輸出(即當前螢幕), 除非重定向輸出.

此時忽略 sigint 訊號.

若關閉會話, 則程序會結束

程序仍舊在前台跑, 預設輸出到nohup.out.

此時程序忽略 sighup 訊號, 關閉會話不影響程序.

ctrl+c會使程序中斷

程序在後台跑, 忽略 sigint, sighup 訊號.

repeat=$

echo 迴圈次數 $repeat

counter=0

while [ $counter -lt $repeat ]

do echo 第$次迴圈

let "counter ++"

sleep 1

done

echo 結束迴圈

[root@yjx214 tmp]# sh test.sh

迴圈次數 20

第0次迴圈

第1次迴圈

第2次迴圈

^c

此時不論是直接ctrl+c或 關閉當前ssh連線, 都會導致程序停止

[root@yjx214 tmp]# sh test.sh > test.out

^c

此時程序仍在前端跑, 檢視test.out檔案會發現在輸出, 此時不論是直接ctrl+c或 關閉當前ssh連線, 都會導致程序停止

[root@yjx214 tmp]# sh test.sh &

[1] 111418

[root@yjx214 tmp]# 迴圈次數 20

第0次迴圈

第1次迴圈

第2次迴圈

^c[root@yjx214 tmp]# 第3次迴圈

第4次迴圈

第5次迴圈

^c[root@yjx214 tmp]# 第6次迴圈

第7次迴圈

第8次迴圈

第9次迴圈

第10次迴圈

第11次迴圈

此時程序在後台跑, 同時缺省會輸出到螢幕上.

此時ctrl+c無效, 即程序忽略了 sigint 訊號.

但若是直接關閉ssh連線(會話), 則該程序會被關閉, 這是因為程序受到了 sighup 訊號影響.

系統對sighup訊號的預設處理是終止收到該訊號的程序。所以若程式中沒有捕捉該訊號,當收到該訊號時,程序就會退出。

[root@yjx214 tmp]# sh test.sh > test.out &

[4] 111758

[root@yjx214 tmp]#

使程序在後台跑, 輸出被重定向到指定檔案

可用jobs -l獲取當前的所有後台程序

[root@yjx214 tmp]# jobs -l

[2]+ 113043 running sh test.sh > /dev/null &

[root@yjx214 tmp]# nohup sh test.sh > test.out 2>&1
執行後是在前端跑, 若關閉會話, 程序不受影響.

但此時ctrl+c會結束程序.

[root@yjx214 tmp]# nohup sh test.sh &

[2] 112987

[root@yjx214 tmp]# nohup: 忽略輸入並把輸出追加到"nohup.out"

[root@yjx214 tmp]#

忽略ctrl+c以及 會話關閉的影響, 程序可以在後台持續執行.

若會話未關閉, 可通過jobs -l檢視當前該程序

[root@yjx214 tmp]# jobs -l

[1]+ 112987 running nohup sh test.sh &

Nohup 與 的區別

1 sighup 程式終止 interrupt 訊號,在使用者鍵入 intr 字元 通常是 ctrl c 時發出,用於通知前台程序組終止程序。使用 後台執行程式 結果會輸出到終端 使用 ctrl c 傳送 sigint 訊號,程式免疫 關閉 session 傳送 sighup 訊號,程式關閉 使用 ...

linux分享六 nohup與 ,守護程序

contab每秒執行指令碼,然後將把標準錯誤重定向到標準輸出 2 1 以追加的方式寫入log cronjob.txt。補充 試想2 1代表什麼,2與 結合代表錯誤重定向,而1則代表錯誤重定向到乙個檔案1,而不代表標準輸出 換成2 1,與1結合就代表標準輸出了,就變成錯誤重定向到標準輸出。另外,使用n...

LINUX 命令nohup的用法

usr local mysql bin mysqld safe user mysql 但是加入我們很多程式並不象mysqld一樣做成守護程序,可能我們的程式只是普通程式而已,一般這種程式使用 結尾,但是如果終端關閉,那麼程式也會被關閉。但是為了能夠後台執行,那麼我們就可以使用nohup這個命令,比如...