nohup命令及其輸出文件
nohup命令:如果你正在運行一個(gè)進(jìn)程,而且你覺(jué)得在退出帳戶(hù)時(shí)該進(jìn)程還不會(huì )結束,那么可以使用nohup命令。該命令可以在你退出帳戶(hù)/關(guān)閉終端之后繼續運行相應的進(jìn)程。nohup就是不掛起的意思( n ohang up)。
一般都是在linux下nohup格式: www.2cto.com
nohup command
或者
nohup command &
這之間的差別是帶&的命令行,即使terminal(終端)關(guān)閉,或者電腦死機程序依然運行(前提是你把程序遞交到服務(wù)器上);
它把標準輸出(STDOUT)和標準錯誤(STDERR)結果輸出到nohup.txt文件這個(gè)看似很方便,但是當輸出很大的時(shí)候,nohup.txt文件會(huì )非常大,或者多個(gè)后臺命令的時(shí)候大家都會(huì )輸出到nohup.txt文件,不利于查找結果和調試程序。
所以能夠重定向輸出會(huì )非常方便。下面要介紹標準輸出,標準輸入 和標準錯誤了。
其實(shí)我們一直都在用,只是沒(méi)有注意到, www.2cto.com
比如
>./command.sh > output
#這其中的>就是標準輸出符號,其實(shí)是 1>output 的縮寫(xiě)
>./command.sh 2> output
#這里的2>就是將標準錯誤輸出到output文件里。
而0< 則是標準輸入了。
下面步入正題,重定向后臺命令
>nohup ./command.sh > output 2>&1 &
解釋?zhuān)呵懊娴膎ohup 和后面的&我想大家都能明白了把。
主要是中間的 2>&1的意思
這個(gè)意思是把標準錯誤(2)重定向到標準輸出中(1),而標準輸出又導入文件output里面, www.2cto.com
所以結果是標準錯誤和標準輸出都導入文件output里面了。
至于為什么需要將標準錯誤重定向到標準輸出的原因,那就歸結為標準錯誤沒(méi)有緩沖區,而stdout有。
這就會(huì )導致 >output 2>output 文件output被兩次打開(kāi),而stdout和stderr將會(huì )競爭覆蓋,這肯定不是我門(mén)想要的.
這就是為什么有人會(huì )寫(xiě)成:
nohup ./command.sh >output 2>output出錯的原因了
##########################
最后談一下/dev/null文件的作用
這是一個(gè)無(wú)底洞,任何東西都可以定向到這里,但是卻無(wú)法打開(kāi)。
所以一般很大的stdou和stderr當你不關(guān)心的時(shí)候可以利用stdout和stderr定向到這里>./command.sh >/dev/null 2>&1
本文原始地址:http://www.2cto.com/os/201301/185701.html