由於各種原因,需要通過ssh登入linux或者unix主機,很多時候我們需要通過ssh的終端啟動一 些服務或者執行一些程式,但是預設情況下,當我們關閉ssh終端連線,隨之啟動的程式也會關閉。原因是:ssh會話關閉時,ssh所關聯的pty關閉,系 統會給這個pty所關聯的session中的所有程序傳送sighup訊號,sighup的預設訊號處理程式是終止程序,除非程序自己處理了 sighup。
解決方法如下:
使用現成的命令nohup,可以讓指定的程式在pty關閉之後繼續執行。
執行方法:
#nohup program &
現在就可以正常關閉ssh了,你會發現你的服務依然存在執行
linux nohup命令詳解
nohup命令及其輸出檔案
nohup命令:如果你正在執行乙個程序,而且你覺得在退出帳戶時該程序還不會結束,那麼可以使用nohup命令。該命令可以在你退出帳戶/關閉終端之後繼續執行相應的程序。nohup就是不掛起的意思( n ohang up)。
一般都是在linux下nohup格式: www.2cto.com
nohup command
或者 nohup command &
這之間的差別是帶&的命令列,即使terminal(終端)關閉,或者電腦宕機程式依然執行(前提是你把程式遞交到伺服器上);
它把標準輸出(stdout)和標準錯誤(stderr)結果輸出到nohup.txt檔案這個看似很方便,但是當輸出很大的時候,nohup.txt檔案會非常大,或者多個後台命令的時候大家都會輸出到nohup.txt檔案,不利於查詢結果和除錯程式。
所以能夠重定向輸出會非常方便。下面要介紹標準輸出,標準輸入 和標準錯誤了。
其實我們一直都在用,只是沒有注意到, www.2cto.com
比如 >./command.sh > output
#這其中的》就是標準輸出符號,其實是 1>output 的縮寫
>./command.sh 2> output
#這裡的2>就是將標準錯誤輸出到output檔案裡。
而0< 則是標準輸入了。
下面步入正題,重定向後台命令
>nohup ./command.sh > output 2>&1 &
解釋:前面的nohup 和後面的&我想大家都能明白了把。
主要是中間的 2>&1的意思
這個意思是把標準錯誤(2)重定向到標準輸出中(1),而標準輸出又匯入檔案output裡面, www.2cto.com
所以結果是標準錯誤和標準輸出都匯入檔案output裡面了。
至於為什麼需要將標準錯誤重定向到標準輸出的原因,那就歸結為標準錯誤沒有緩衝區,而stdout有。
這就會導致 >output 2>output 檔案output被兩次開啟,而stdout和stderr將會競爭覆蓋,這肯定不是我門想要的.
這就是為什麼有人會寫成:
nohup ./command.sh >output 2>output出錯的原因了
##########################
最後談一下/dev/null檔案的作用
這是乙個無底洞,任何東西都可以定向到這裡,但是卻無法開啟。
所以一般很大的stdou和stderr當你不關心的時候可以利用stdout和stderr定向到這裡》./command.sh >/dev/null 2>&1
linux如何執行後台程序
linux直接執行乙個過程。電流指令結束後。或者關閉掉shell形成過程將結束。如何在後台執行的處理 辦法1採用nohup命令,nohup命令本身的意思no hung up他說,他們將不會收到shell關閉,封閉該過程。使用nohup command 使得命令能夠在後台執行。通過job l能夠看到後...
linux 後台程序
後台執行模式 在命令列輸入命令之後,在最後麵加乙個 符號,即可實現命令後台執行。如果想要顯示資訊也不列印在螢幕上,可以按照如下方式進行。dev null 2 1 遮蔽一切log tmp log 2 1 可以在 log中看日誌 後台執行時,都會有作業號,可以用jobs命令檢視,帶 的就是作業號,後面有...
linux程序後台管理
fg bg jobs ctrl z命令 一 加在乙個命令的最後,可以把這個命令放到後台執行 如gftp 二 ctrl z 可以將乙個正在前台執行的命令放到後台,並且處於暫停狀態,不可執行 三 jobs 檢視當前有多少在 後台 執行的命令 jobs l選項可顯示所有任務的pid,jobs的狀態可以是r...