如何高效的在後臺運行 Linux 命令?

前言

一般狀況下,在 Linux 終端中運行命令時,咱們必須等前一命令執行完成後,在輸入並執行後一條命令,稱之爲在前臺或前臺進程中運行命令,進程在前臺運行時,將佔用您的外殼,而且您也可使用輸入設備與其終端進行交互。html

當一條命令執行須要很長時間才能完成,而且想同時運行其餘命令怎麼辦呢?git

  • 第一: 啓動新的 Shell 會話並在其中運行命令;
  • 第二: 在後臺運行命令;

後臺進程是從終端啓動並在後臺運行,無需用戶與其終端進行交互的進程及命令;github

1、組合鍵及命令

以 httpd-2.2.17.tar.gz 壓縮包爲例,好比一個壓縮包文件解壓需在終端屏幕下解壓很長時間,甚至要刷很長一段屏幕才能解壓完畢,那麼咱們能夠按下Ctrl+Z組合鍵,即可以暫停運行並隱藏到後臺,將會返回一箇中止序號,此時進程時暫停的,並不會繼續運行。post

輸入bg命令便可繼續將該任務在後臺執行。url

輸入fg + 序號命令便可讓進程返回到前臺執行。spa

執行過程當中,能夠輸入jobs命令來查看全部的後臺任務了。.net

# tar -zxf httpd-2.2.17.tar.gz                             ## 解壓 httpd 壓縮包
^Z                                                         ## 按下 Ctrl+Z 組合鍵暫停
[1]+  Stopped                 tar -zxf httpd-2.2.17.tar.gz

# bg                                                       ## 輸入 bg 命令,繼續在後臺運行
[1]+ tar -zxf httpd-2.2.17.tar.gz &

# jobs                                                     ## 查看全部的後臺任務
[1]+  Done                    tar -zxf httpd-2.2.17.tar.gz
複製代碼

2、&

在執行命令後加 &,使其在終端後臺運行。日誌

# ./yum_install.sh &
複製代碼

執行完如上命令,yum腳本便在後臺運行,雖然在後臺運行了,但輸出的內容仍是會在終端上進行顯示的,那麼咱們能夠採用將執行後的命令輸出結果重定向到文件中。code

# ./yum_install.sh >> 202001141411out.txt 2>&1 &
複製代碼

將執行的結果重定向到202001141411out.txt文件中,2>&1將標準錯誤重定向到標準輸出,判斷yum腳本文件執行成功沒成功,咱們只需查看202001141411out.txt文件便可;htm

若是出現腳本文件執行了一段時間,卡死,沒法繼續運行了,能夠經過第一種方法:jobs命令

# jobs -l
複製代碼

或者使用ps命令

# ps -aux | grep yum_install.sh
複製代碼

3、nohup

&:可使命令在後臺運行,當關閉控制檯時,進程也將會被殺死,若是但願關閉控制檯後,進程依舊運行,這時則須要使用nohup。

nohup:no hang up,不掛起的意思。

在執行命令最前面使用nohup,當關閉控制檯時,進程依舊會在後臺繼續運行。

# nohup ./yum_install.sh &
複製代碼

如上nohup執行方式,當判斷該腳本是否執行完畢,可執行命令ps -aux | grep yum_install.sh查看;

除此以外,咱們能夠將運行結果輸出到nohup.log文件中,當沒有指定輸出重定向時,日誌文件會默認輸出到nohup.out文件;

# nohup ./yum_install.sh > nohup.log 2>&1 &
複製代碼

若是文章和筆記能帶您一絲幫助或者啓發,請不要吝嗇你的贊和收藏,你的確定是我前進的最大動力😁

若是你以爲這篇文章對你有點用的話,麻煩請給咱們的開源項目點點star:     http://github.crmeb.net/u/defu       不勝感激 !
來自 「開源世界 」 ,連接:   https://ym.baisou.ltd/post/763.html ,如需轉載,請註明出處,不然將追究法律責任
相關文章
相關標籤/搜索