nohup後台執行以及重定向標準輸出和標準異常

2021-09-28 17:27:00 字數 1859 閱讀 8176

nohup&是後台執行並把stdout輸出到檔案nohup.out中。其實&是後台執行的命令。

一般都是在linux下nohup格式:

nohup command_line

或者nohup command_line &

不帶&的命令是在前台執行,按下ctr+c時,任務中斷。帶&的命令時後台執行,即使terminal關閉,或者電腦宕機程式依然執行(前提是程式已遞交到伺服器上)。

以上兩個命令把標準輸出(stdout)和標準錯誤(stderr)結果輸出到nohup.txt。但是當輸出很大的時候,nohup.txt檔案會非常大,或者多個後台命令的時候大家都會輸出到nohup.txt檔案,不利於查詢結果和除錯程式。

所以能夠重定向輸出會非常方便。下面要介紹標準輸出,標準輸入 和標準錯誤了。

其實我門一直都在用,只是沒有注意到,比如

./command.sh > output

這其中的>就是標準輸出符號,其實是1>output的縮寫

./command.sh 2> output

這裡的2>就是將標準錯誤輸出到output檔案裡。而0<則是標準輸入了。

模板命令如下:

nohup ./command.sh > output 2>&1 &

nohup有兩個作用:

忽略所有傳送給子命令的結束通話(sighup)訊號

所有發給command.sh的sighup訊號都被忽略,command.sh就不會收到sighup訊號。什麼是sighup訊號呢?

簡單的理解可以是終端結束時,作業系統會傳送sighup訊號到後台程序。

重定向子命令的標準輸出(stdout)和標準錯誤(stderr)

command.sh的標準輸出和標準錯誤被重定向到nohup.out檔案;如果沒有使用nohup方式,則command.sh的標準輸出和標準錯誤是復用父程序的標準輸出和標準錯誤。

後台執行,即使terminal關閉,或者電腦宕機程式依然執行(前提是程式已遞交到伺服器上)

這個命令的意思是把標準錯誤(2)重定向到標準輸出中(1),而標準輸出又匯入檔案output裡面,所以結果是標準錯誤和標準輸出都匯入檔案output裡面了。

至於為什麼需要將標準錯誤重定向到標準輸出的原因,那就歸結為標準錯誤沒有緩衝區,而stdout有。

這就會導致>output 2>output檔案output被兩次開啟,而stdout和stderr將會競爭覆蓋,這就是為什麼有人會寫成:

nohup ./command.sh >output 2>output出錯的原因了

通常後台執行重定向可以寫成:

nohup sh command.sh > logs/command.log 2>&1 &

標準錯誤和標準輸出都會匯入logs資料夾下的command.log日誌檔案。

這是乙個無底洞,任何東西都可以定向到這裡,但是卻無法開啟。所以一般很大的stdou和stderr當你不關心的時候可以利用stdout和stderr定向到這裡>./command.sh >/dev/null 2>&1

nohup後台執行程式以及輸出重定向

第一種 支援後台執行,但是關閉終端的話,程式也會停止 command 第二種 支援後台執行,關閉終端後,程式也會繼續執行 nohup command 但是,當我自己使用nohup這個命令時,會報下面這樣的錯。或者這樣的錯。nohup failed to run command etc nginx c...

python subprocess重定向標準輸出

subprocess.call ping c 1 s ip,shell true,stdout open dev null w stderr subprocess.stdout ping傳送乙個icmp請求,並且將標準輸出重定向到 dev null,相當於丟棄,並且將標準錯誤輸出重新定向到標準輸出。...

nohup 後台執行

1 nohup命令 nohup 命令 log 會將本應在螢幕上顯示的輸出,重定向到同級目錄的 out中,即後台執行並把stdout輸出到檔案nohup.out中,可以使用 來重定向輸出。2 例子 3 應用環境 一般都是在linux下 4 nohup是否有匹配的 nohup command line或...