測試**如下
是乙個輸出 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...