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+&