Linux系列 了解nohup和 的功效

2021-10-01 10:57:32 字數 2710 閱讀 3928

測試**如下

是乙個輸出 tinywan字串與迴圈輪數的死迴圈程式,每輸出一行就休眠1秒。

原始輸出

前台執行該程式執行效果

程式每隔一秒會在終端輸出乙個字串 。

此時如果鍵入 ctrl+c ,程式會收到乙個 sigint訊號,如果不做特殊處理,程式的預設行為是終止(如上圖)。

訊號量 sigint

程式終止(interrupt)訊號, 在使用者鍵入intr字元(通常是ctrl-c)時發出,用於通知前台程序組終止程序。

使用 &

下來使用 php tinywan.phpt&後台執行程式,會是什麼效果呢?

如上執行結果:

首先會在終端顯示程序號是 17153
鍵入ctrl + c,發出sigint訊號,程式會繼續執行 。
ps確認一下,確認程序依然在執行,程序號是 17153。

此時如果關掉session(關閉當前的終端回話視窗),程式會收到乙個sighup訊號,此時會怎麼樣呢?

ps再次確認,可以看到關閉session之後,程序號是 17153的程序也關閉了。

如果不關閉終端的情況,想結束該程序,可以使用kill命令:kill-917153

使用 nohup

使用nohup 執行程式 tinywan.php,會發現:

前台沒有出現程序號
有乙個 「忽略輸入,輸出至nohup.out」的提示
tinywan的輸出也沒有出現在前台

忽略輸入並將輸出附加到』nohup.out』,檢視這個檔案內容

手動ps看程序號,這次 tinywan.php 的程序號是 17557。

此時如果關掉session,程式會收到乙個 sighup訊號,程式會不會關閉呢?

訊號量 sighup

本訊號在使用者終端連線(正常或非正常)結束時發出, 通常是在終端的控制程序結束時, 通知同一session內的各個作業,這時它們與控制終端不再關聯。

此外,對於與終端脫離關係的守護程序,這個訊號用於通知它重新讀取配置檔案。

關掉session後,再次ps看一下,id為 17557的 tinywan.php 程序還在。

這些只能通過kill把程式乾掉了,killall之後,ps檢視程序已經關閉。

終端執行

使用 nohup php tinywan.php&執行程式後,可以看到

會在終端顯示程序號是 17947
也會有乙個「忽略輸入,輸出至nohup.out」的提示
鍵入ctrl + c,傳送sigint訊號,似乎沒反應。
關閉session,傳送sighup訊號,再來看看。

id為 17947的程序依然存在,後續也只能用kill來關閉它。

使用 &後台執行程式:

結果會輸出到終端

使用ctrl + c傳送sigint訊號,程式免疫

關閉session傳送sighup訊號,程式關閉

使用 nohup執行程式:

結果缺省會輸出到nohup.out

使用ctrl + c傳送sigint訊號,程式關閉

關閉session傳送sighup訊號,程式免疫

平日線上經常使用 nohup和 &配合來啟動程式

同時免疫sigint和sighup訊號

(最佳實踐)不要將資訊輸出到終端標準輸出,標準錯誤輸出,而要用日誌元件將資訊記錄到日誌裡

了解nohup和 的功效

nohup和 究竟有啥區別?不少同學進行了回覆,但並不是所有同學都理解得全對,今天把自己挖的坑自己填了。測試 如下 是乙個輸出 hello 與迴圈輪數的死迴圈程式,每輸出一行就休眠1秒。使用 a.out 前台執行程式,會是什麼效果呢?程式每隔一秒會在終端輸出乙個字串。此時如果 鍵入ctrl c 程式...

linux後台執行命令 和nohup

當我們在終端或控制台工作時,可能不希望由於執行乙個作業而佔住了螢幕,因為可能還有更重要的事情要做,比如閱讀電子郵件。對於密集訪問磁碟的程序,我們更希望它能夠在每天的非負荷高峰時間段執行 例如凌晨 為了使這些程序能夠在後台執行,也就是說不在終端螢幕上執行,有幾種選擇方法可供使用。nohup start...

linux後台執行命令 和nohup

command out.file 2 1 nohup command nohup command myout.file 2 1 ctrl c 終止前台命令。jobs 檢視當前有多少在後台執行的命令。jobs l選項可顯示所有任務的pid,jobs的狀態可以是running,stopped,termi...