Linux nohup和&的功效 Linux nohup和&的功效

Linux nohup和&的功效

https://www.cnblogs.com/laoyeye/p/9346330.htmlhtml

這是我轉載的文章,寫的很好,java

nohup Command [ Arg ... ] [ & ]微信

&:進程後臺執行session

不掛斷地運行命令。no hangup的縮寫,意即「不掛斷」架構

例如:nohup java -jar aa.jar & //aa.jar包就不會被contrl+c終止,&是能夠在後臺執行app

 

 

nohup和&究竟有啥區別?很多同窗進行了回覆,但並非全部同窗都理解得全對,今天把本身挖的坑本身填了。post

測試代碼以下:測試

是一個輸出hello與循環輪數的死循環程序,每輸出一行就休眠1秒。url

使用 ./a.out 前臺運行程序,會是什麼效果呢?3d

程序每隔一秒會在終端輸出一個字符串。

此時若是鍵入Ctrl+C ,程序會收到一個SIGINT信號,若是不作特殊處理,程序的默認行爲是終止(如上圖)。

使用 ./a.out& 後臺運行程序,會是什麼效果呢?

如上圖:

  • 首先會在終端顯示進程號是32389

  • 鍵入Ctrl + C,發出SIGINT信號,程序會繼續運行

ps確認一下,確認進程依然在運行,進程號是32389。

此時若是關掉session,程序會收到一個SIGHUP信號,此時會怎麼樣呢?

ps再次確認,能夠看到關閉session以後,進程號是32389的a.out進程也關閉了。

使用nohup ./a.out 又會是什麼效果呢?

使用nohup 運行程序a.out,會發現:

  • 前臺沒有出現進程號

  • 有一個「忽略輸入,輸出至nohup.out」的提示

  • hello的輸出也沒有出如今前臺

手動ps看進程號,此次a.out的進程號是32437。

此時若是關掉session,程序會收到一個SIGHUP信號,程序會不會關閉呢?

關掉session後,再次ps看一下,ID爲32437的a.out進程還在。

這些只能經過kill把程序幹掉了,killall以後,ps查看進程已經關閉。

killall以後,查看發現多了一個nohup.out文件,不過這個文件的大小是0,有點奇怪,啓動程序的時候,明明提示了「appending output to nohup.out」呀,先把問題遺留在這,測試一下Ctrl +C。

仍如上圖,使用nohup啓動a.out,若是鍵入Ctrl+C ,程序收到SIGINT信號後,直接關閉了。

最後測試一下nohup和&同時使用,即用nohup./a.out &運行程序,又會是什麼效果呢?

使用nohup ./a.out &運行程序後,能夠看到:

  • 會在終端顯示進程號是32524

  • 也會有一個「忽略輸入,輸出至nohup.out」的提示

鍵入Ctrl + C,發送SIGINT信號,彷佛沒反應。

關閉session,發送SIGHUP信號,再來看看。

ID爲32524的進程依然存在,後續也只能用kill來關閉它。

結論

使用&後臺運行程序:

  • 結果會輸出到終端

  • 使用Ctrl + C發送SIGINT信號,程序免疫

  • 關閉session發送SIGHUP信號,程序關閉

使用nohup運行程序:

  • 結果默認會輸出到nohup.out

  • 使用Ctrl + C發送SIGINT信號,程序關閉

  • 關閉session發送SIGHUP信號,程序免疫

平日線上常用nohup和&配合來啓動程序

  • 同時免疫SIGINT和SIGHUP信號

同時,還有一個最佳實踐:

  • 不要將信息輸出到終端標準輸出,標準錯誤輸出,而要用日誌組件將信息記錄到日誌裏

本文轉載自微信公衆號:架構師之路,由於老找不到地址,作下記錄~

相關文章
相關標籤/搜索