Linux后台運行任務 nohup &


Linux后台運行任務 nohup &

& 不中斷

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

image-20200701192949473

nohup 不掛起

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

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

image-20200701162224060

此時會忽略輸入,並將輸出重定向到nohup.out,當然,你可以使用管道符自定義輸出文件

image-20200701162808273

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

image-20200701163015536

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

對於&1 更准確的說應該是文件描述符 1,而1標識標准輸出,stdout。

結合nohup和&

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

image-20200701193158150

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

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

image-20200701194949804

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

kill -9 ID

總結

&會在后台執行,忽略Ctrl+C的SIGINT信號

nohup會忽略關閉session的SIGHUP信號

一般同時使用nohup+&


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM