1. 程式人生 > >Linux nohup命令詳解,終端關閉程式依然可以在執行!

Linux nohup命令詳解,終端關閉程式依然可以在執行!

大家好,我是良許。 在工作中,我們很經常跑一個很重要的程式,有時候這個程式需要跑好幾個小時,甚至需要幾天,這個時候如果我們退出終端,或者網路不好連線中斷,那麼程式就會被中止。而這個情況肯定不是我們想看到的,我們希望即使終端關閉,程式依然可以在跑。 這時我們就可以使用 `nohup` 這個命令。 `nohup` 命令是英語片語 `no hangup` 的縮寫,意思是`不掛斷`,也就是指程式不退出。這個命令會使程式忽略 `HUP` 訊號,保證程式能夠正常進行。`HUP` 訊號有些人可能比較陌生,它是在終端被中止的時候向它所關聯的程序所發出的訊號,程序收到這個訊號後就會中止執行。所以如果你不希望程序被這個訊號幹掉的話,就可以忽略這個訊號。而 `nohup` 命令做的就是這個事情。 本文我們將詳細介紹 `nohup` 命令的具體用法。 #### nohup命令基本語法 nohup 命令的基本語法如下: ``` $ nohup command arguments ``` 或者: ``` $ nohup options ``` 如果你想要得到更多關於 nohup 的用法介紹,可以檢視它的幫助頁面: ``` $ nohup --help ``` 如果你需要檢視它的版本號,可以使用 `--version` 選項。 ``` $ nohup --version ``` #### 使用nohup命令啟動一個程式 如果你需要執行一個程式,即使對應的 Shell 被退出後依然保持執行,可以這樣使用 nohup 執行這個程式: ``` $ nohup command ``` 當這個程式進行起來之後,這個程式對應的 log 輸出及其錯誤日誌都將被記錄在 `nohup.out` 檔案裡,這個檔案一般位於家目錄或者當前目錄。 #### 重定向程式的輸出 如果我不想把程式的輸出儲存在家目錄或者當前目錄,我想儲存在我指定的路徑,並且自定義檔名,要怎麼操作?這時我們就可以使用重定向操作 `>` 。 比如,我現在有個指令碼 `myScript.sh` 我想把它的輸出儲存在家目錄下的 `output` 目錄下,檔名為 `myOutput.txt` ,可以這樣執行: ``` $ nohup ./myScript.sh > ~/output/myOutput.txt ``` #### 使用nohup命令後臺啟動一個程式 如果想讓程式在後臺執行,可以加上 `&` 符號。但這樣執行之後,程式就無影無蹤了。想要讓程式重新回到終端,可以使用 `fg` 命令。 ![](https://img2020.cnblogs.com/other/1218435/202006/1218435-20200618191247688-905830296.jpg) 這個命令的輸出 log 將儲存在 nohup.out 檔案裡,你可以使用 cat 或其它命令檢視。第二行裡 8699 這個數字代表這個命令對應的程序號,也就是 pid 。我們可以使用 `ps` 命令來找到這個程序。 #### 使用nohup同時執行多個程式 如果你需要同時跑多個程式,沒必要一個個執行,直接使用 `&&` 符號即可。比如,你想同時跑 mkdir ,ping,ls 三個命令,可以這樣執行: ``` $ nohup bash -c 'mkdir files && ping -c 1 baidu.com && ls'> output.txt ``` ![](https://img2020.cnblogs.com/other/1218435/202006/1218435-20200618191247918-1942433682.jpg) #### 終止跑在後臺的程序 上面有提到,`nohup` 命令結合 `&` 符號可以使程序在後臺執行,即使關閉了終端依然不受影響。這時,如果想要終止這個程序,要怎麼操作呢? 最簡單的當屬 `kill` 命令,相信大家用過很多次了。 ``` $ kill -9 PID ``` 那要如何找到程序對應的 pid 呢?我們可以使用 `ps` 命令。 ``` $ ps aux | grep myScript.sh ``` ![](https://img2020.cnblogs.com/other/1218435/202006/1218435-20200618191248423-887796841.jpg) 或者你使用 `pgrep` 命令也行。 ![](https://img2020.cnblogs.com/other/1218435/202006/1218435-20200618191248613-980954173.jpg) 接下來,再使用 `kill` 命令就可以終止該程序了。 ``` $ kill -9 14942 ``` --- 公眾號:良許Linux ### 有收穫?希望老鐵們來個三連擊,給更多的人看到這