天天看點

【Linux】nohup和&的差別

同樣都是背景執行程序,但是nohup和&有什麼差別呢?

& 是指背景運作;

 nohup 的功能和& 之間的功能并不相同。

其中,nohup 可以使得指令永遠運作下去和使用者終端沒有關系。

當我們斷開ssh 連接配接的時候不會影響他的運作。

而& 表示背景運作。當ssh 斷開連接配接的時候(使用者退出或挂起的時候),指令也自動退出。

 當然我們可以把兩者結合起來使用:  

nohup command &   
           

來實作指令的背景運作并且和使用者終端沒有關系。  

由 nohup 文檔來看:  

If the output file nohup.out cannot be created in the current directory, the nohup utility uses the directory named by HOME to create the file.  

表示:

nohup 指令執行後,會産生日志檔案,把指令的執行中的消息報損到這個檔案之中。

如果目前檔案不可寫,那麼會自動儲存到執行這個指令的home 目錄下面。

如果是超級管理者root 對應的是/root 目錄。

 從上面對比我們發現:

 1. & 可以使得指令 免疫 ctrl c 的 SIGINT 信号,不能是的指令對 SIGHUP 信号進行免疫。

 2. nohup 可以使得指令對兩個信号都可以進行免疫。  為了使得 & 達到相同的效果:

總結:

1.nohup可以挂載背景執行,同樣終端退出或者斷開不會影響程序,同樣如果使用預設的nohup command 的話,預設會出現一個nohup.out檔案來輸出程序執行的内容,前提是運作的使用者有目前目錄的寫權限。但執行nohup command的時候,不會顯示指令行,直到程式結束

2.& 同樣可以挂載到背景執行,但是終端退出或者ssh端口,都會引起背景程序停止

兩者同時使用是最好的結果

nohup command &

來達到推出中端也不會影響背景程序運作

如果想要檢視正在背景執行的程序

可以使用jobs指令來檢視

直接指令行輸入jobs即可檢視使用&或者nohup xx &

再或者直接使用ps -ef 或者ps aux 直接檢視程序即可

繼續閱讀