linux後臺執行命令:&與nohup的用法
大家可能有這樣的體驗:某個程式執行的時候,會產生大量的log,但實際上我們只想讓它跑一下而已,log暫時不需要或者後面才有需要。所以在這樣的情況下,我們希望程式能夠在後臺進行,也就是說,在終端上我們看不到它所打出的log。為了實現這個需求,我們介紹以下幾種方法。
我們以下面一個test程式來模擬產生大量log的程式,這個程式每隔1秒就會列印一句“Hello world!”:
#include
#include
#include
int main()
{
fflush(stdout);
setvbuf(stdout, NULL, _IONBF, 0);
while (1) {
printf("Hello world!
");
sleep(1);
}
}
現在,我們想要一個清靜的世界,終端上不要有大量的log出現,我們要求test程式在後臺執行。
&
這種方法很簡單,就是在命令之後加個“&”符號就可以了,如下:
./test &
這樣一來,test程式就在後臺執行了。但是,這樣處理還不夠,因為這樣做雖然程式是在後臺執行了,但log依然不停的輸出到當前終端。因此,要讓終端徹底的清靜,還應將log重定向到指定的檔案:
./test >> out.txt 2>&1 &
2>&1是指將標準錯誤重定向到標準輸出,於是標準錯誤和標準輸出都重定向到指定的out.txt檔案中,從此終端徹底清靜了。
但是這樣做要注意,如果Test程式需要從標準輸入接收資料,它就會在那死等,不會再往下執行。所以需要從標準輸入接收資料,那這種方法最好不要使用。
那現在程式在後臺執行了,我們怎麼找到它呢?很簡單,有兩種方法:
1. jobs命令
jobs命令可以檢視當前有多少在後臺執行。
jobs -l
此命令可顯示所有任務的PID,jobs的狀態可以是running, stopped, Terminated。但是如果任務被終止了(kill),shell 從當前的shell環境已知的列表中刪除任務的程式標識。
2. ps命令
ps aux | grep test
nohup命令
在命令的末尾加個&符號後,程式可以在後臺執行,但是一旦當前終端關閉(即退出當前帳戶),該程式就會停止執行。那假如說我們想要退出當前終端,但又想讓程式在後臺執行,該如何處理呢?
實際上,這種需求在現實中很常見,比如想遠端到伺服器編譯程式,但網路不穩定,一旦掉線就編譯就中止,就需要重新開始編譯,很浪費時間。
在這種情況下,我們就可以使用nohup命令。nohup就是不掛起的意思( no hang up)。該命令的一般形式為:
nohup ./test &
如果僅僅如此使用nohup命令的話,程式的輸出會預設重定向到一個nohup.out檔案下。如果我們想要輸出到指定檔案,可另外指定輸出檔案:
nohup ./test > myout.txt 2>&1 &
這樣一來,多管齊下,既使用了nohup命令,也使用了&符號,同時把標準輸出/錯誤重定向到指定目錄下。
使用了nohup之後,很多人就這樣不管了,其實這樣有可能在當前賬戶非正常退出或者結束的時候,命令還是自己結束了。所以在使用nohup命令後臺執行命令之後,需要使用exit正常退出當前賬戶,這樣才能保證命令一直在後臺執行。
原文釋出時間為:2018-09-21
原文作者:
本文來自雲棲社群合作伙伴“良許Linux”,瞭解相關資訊可以關注“良許Linux”。
相關文章
- Linux nohup:後臺不掛起命令(後臺執行命令)Linux
- windows的nohup後臺執行Windows
- Jenkins踩坑之旅:nohup後臺執行shell命令Jenkins
- Linux 後臺執行命令Linux
- linux 中的 nohup 命令(設定後臺程式): nohup: ignoring input and appending output to ‘nohup.out’LinuxAPP
- 還在用nohup? 來試試Supervisor吧 -Linux後臺執行Linux
- [linux] 使用Screen後臺執行命令Linux
- nohup在後臺常駐執行php指令碼PHP指令碼
- shell:nohup (在系統後臺不掛起地執行命令,退出終端不會影響程式的執行)
- Linux後臺執行Linux
- Linux基礎命令—nohupLinux
- Linux jar包 後臺執行LinuxJAR
- Linux 下後臺執行和按照守護程式方式後臺執行的坑Linux
- rocky與linux的nmcli命令用法Linux
- [原創] Linux 中的 nohup 與 &Linux
- Linux程式後臺執行實踐Linux
- 讓.py程式後臺執行(Linux)Linux
- Linux 後臺執行 PHP 指令碼LinuxPHP指令碼
- nohup命令
- nohup 命令的使用
- 收集 Linux 命令列執行的命令Linux命令列
- 如何在後臺執行 Linux 命令並且將程式脫離終端Linux
- linux後臺執行和關閉、檢視後臺任務Linux
- Linux scp 後臺執行傳輸檔案Linux
- Linux基礎命令---忽略掛起訊號nohupLinux
- nohup 命令及其示例
- linux執行環境&命令Linux
- Springboot 在 Linux 中打包 Jar 包在後臺執行Spring BootLinuxJAR
- linux 中 date命令的用法Linux
- linux useradd命令的基本用法Linux
- Linux sed命令用法Linux
- shell後臺執行
- Linux終端退出後導致nohup程式退出Linux
- 執行python指令碼後臺執行Python指令碼
- Linux 技巧:讓程式在後臺可靠執行的幾種方法Linux
- Linux系統執行命令方法Linux
- 大資料開發-linux後臺執行,關閉,檢視後臺任務大資料Linux
- Linux基礎命令---間歇執行命令watchLinux