1. 程式人生 > 實用技巧 >Linux後臺執行任務 nohup &

Linux後臺執行任務 nohup &

Linux後臺執行任務 nohup &

& 不中斷

&表示在後臺執行命令,沒有辦法通過Ctrl+C結束命令,但是可以通過關閉終端來殺掉程序。

nohup 不掛起

nohup命令:如果你正在執行一個程序,而且你覺得在退出帳戶時該程序還不會結束,那麼可以使用nohup命令。該命令可以在你退出帳戶/關閉終端之後繼續執行相應的程序。nohup就是不掛起的意思( no hang up)

在我們關閉session時會發出SIGHUP訊號,終端裡執行的程式會結束,如果想要忽略SIGHUP訊號,就需要在命令前增加nohup命令,此時關閉session後命令會繼續執行。

此時會忽略輸入,並將輸出重定向到nohup.out

,當然,你可以使用管道符自定義輸出檔案

這樣就將輸出重定向到myout.file,redirecting stderr to stdout的意思是告訴你標準錯誤也會重定向到標準輸出。當然,你也可以自己將標準錯誤重定向到輸出,這樣就不會有警告。

對於2 ,表示標準錯誤,stderr。

對於&1 更準確的說應該是檔案描述符 1,而1標識標準輸出,stdout。

結合nohup和&

很多時候單獨的nohup並不能滿足我們的需求,你會發現在執行上面的命令只能等待任務執行完,在此之前任何輸入都沒有用除非新開個終端,所以nohup經常和&一起用。

此時程式在後臺執行,你可以繼續執行其他操作,而且關閉終端也不會影響任務的執行。

我們可以通過jobs -l來顯示任務列表及狀態,其中-l是顯示程序號。但是jobs命令只對當前終端生效,當我們重新開啟終端後jobs就不能顯示任務狀態了,此時只能用ps命令檢視當前程序。

其中29979就是程序ID,15965是父程序ID,如果要結束某個程序,可以使用kill命令

kill -9 ID

總結

&會在後臺執行,忽略Ctrl+C的SIGINT訊號

nohup會忽略關閉session的SIGHUP訊號

一般同時使用nohup+&