大家好,我是良許,
在作業中,我們很經常跑一個很重要的程式,有時候這個程式需要跑好幾個小時,甚至需要幾天,這個時候如果我們退出終端,或者網路不好連接中斷,那么程式就會被中止,而這個情況肯定不是我們想看到的,我們希望即使終端關閉,程式依然可以在跑,
這時我們就可以使用 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 命令,

這個命令的輸出 log 將保存在 nohup.out 檔案里,你可以使用 cat 或其它命令查看,第二行里 8699 這個數字代表這個命令對應的行程號,也就是 pid ,我們可以使用 ps 命令來找到這個行程,
使用nohup同時運行多個程式
如果你需要同時跑多個程式,沒必要一個個運行,直接使用 && 符號即可,比如,你想同時跑 mkdir ,ping,ls 三個命令,可以這樣運行:
$ nohup bash -c 'mkdir files &&
ping -c 1 baidu.com && ls'> output.txt

終止跑在后臺的行程
上面有提到,nohup 命令結合 & 符號可以使行程在后臺運行,即使關閉了終端依然不受影響,這時,如果想要終止這個行程,要怎么操作呢?
最簡單的當屬 kill 命令,相信大家用過很多次了,
$ kill -9 PID
那要如何找到行程對應的 pid 呢?我們可以使用 ps 命令,
$ ps aux | grep myScript.sh

或者你使用 pgrep 命令也行,

接下來,再使用 kill 命令就可以終止該行程了,
$ kill -9 14942
公眾號:良許Linux
有識訓?希望老鐵們來個三連擊,給更多的人看到這篇文章
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/52910.html
標籤:Linux
下一篇:k8s:py專案發布完整流程
