centos7中的nohup和&的用法和區別


1.&和nohup的區別

&的意思是在后台運行, 意思是說, 當你在執行 ./start.sh & 的時候, 即使你用ctrl C, 那么start.sh照樣運行(因為對SIGINT信號免疫)。 但是要注意, 如果你直接關掉shell后(斷開SSH連接), 那么,start.sh進程同樣消失。 可見, &的后台並不硬(因為對SIGHUP信號不免疫)。

nohup的意思是忽略SIGHUP信號, 所以當運行nohup ./start.sh的時候, 關閉shell(斷開SSH連接), 那么start.sh進程還是存在的(對SIGHUP信號免疫)。 但是, 要注意, 如果你直接在shell中用Ctrl C, 那么start.sh進程也是會消失的(因為對SIGINT信號不免疫)

2.舉例分析&和nohup的實際作用和效果

sh test.sh & 將sh test.sh任務放到后台 ,即使關閉xshell退出當前session依然繼續運行,但標准輸出和標准錯誤信息會丟失

nohup sh test.sh 將sh test.sh任務放到后台,關閉標准輸入,前台不再能夠接收任何輸入(標准輸入),重定向標准輸出和標准錯誤到當前目錄下的nohup.out文件,即使關閉xshell退出當前session依然繼續運行。

nohup sh test.sh & 將sh test.sh任務放到后台,但是依然可以使用標准輸入,前台能夠接收任何輸入,重定向標准輸出和標准錯誤到當前目錄下的nohup.out文件,即使關閉xshell退出當前session依然繼續運行。

綜上所述,如果你要讓一個進程既不受Ctrl C的影響也不受關閉shell的影響,就將nohup和&聯合起來使用,例如我在編寫Jenkins部署發布SpringCloud微服務的jar包的腳本時就會用都下面的命令:

nohup java -jar $JARFILE >& $JARFIILE.log &

這樣就會使該進程以守護進程的模式一直運行在后台,並且不會關閉標准輸入,也就是你還可以去做別的事情,比如啟動其他jar包。

 

注:本文參考文章https://www.jianshu.com/p/93a45927f013

 


免責聲明!

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



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