如何在後台運行Linux命令

通常,當您在終端中運行命令時,必須等到命令完成後才能輸入另一個命令。 這稱為在前台或前台進程中運行命令。 當進程在前台運行時,它將佔用您的外殼,並且您可以使用輸入設備與其進行交互。

如果該命令需要很長時間才能完成,並且您希望同時運行其他命令怎麼辦? 您有幾種選擇可以使用。 最明顯和最直接的選擇是啟動一個新的Shell會話並在其中運行命令。 另一種選擇是在後台運行命令。

後台進程是從終端啟動並在後台運行而無需用戶交互的進程/命令。

在本文中,我們將討論後台進程是Linux。 我們將向您展示如何在後台啟動命令以及如何在關閉Shell會話後保持進程運行。

在後台運行Linux命令

要在後台運行命令,請添加&符號(&),在命令末尾:

command &

Shell作業ID(用括號括起來)和進程ID將打印在終端上:

[1] 25177

您可以在後台同時運行多個進程。

後台進程將繼續向您從中調用命令的終端寫入消息。 壓制 stdoutstderr 消息使用以下語法:

command > /dev/null 2>&1 & 

>/dev/null 2>&1 表示重定向 stdout/dev/nullstderrstdout

使用 jobs 實用程序,用於顯示當前shell會話中所有已停止和後台作業的狀態:

jobs -l

輸出包括作業編號,進程ID,作業狀態以及啟動該作業的命令:

[1]+ 25177 Running                 ping google.com &

要將後台進程置於前台,請使用 fg 命令:

fg

如果您有多個後台作業,請包括 % 和命令後的作業ID:

fg %1

要終止後台進程,請使用 kill 命令,後跟進程ID:

kill -9 25177

將前台流程移至後台#

在後台移動正在運行的前台進程:

  1. 通過鍵入停止該過程 Ctrl+Z
  2. 通過鍵入將已停止的進程移至後台 bg

Shell退出後保持後台進程運行#

如果連接斷開或退出Shell會話,則後台進程將終止。 有幾種方法可以使進程在交互式Shell會話結束後保持運行。

一種方法是使用以下命令從shell的作業控件中刪除作業: disown 內置的shell:

disown

如果您有多個後台工作,請包括 % 和命令後的作業ID:

disown %1

使用確認從活動作業表中刪除該作業。 jobs -l 命令。 要列出所有正在運行的進程,包括未使用的進程,請使用 ps aux 命令。

在退出外殼後使進程保持運行的另一種方法是使用 nohup

nohup 命令執行另一個程序作為其參數指定,並忽略所有 SIGHUP (掛斷)信號。 SIGHUP 是在其控制終端關閉時發送到進程的信號。

要在後台運行命令 nohup 命令,鍵入:

nohup command &

命令輸出重定向到 nohup.out 文件。

nohup: ignoring input and appending output to 'nohup.out'

如果註銷或關閉終端,該過程不會終止。

備擇方案 #

有許多程序可讓您同時進行多個交互式會話。

屏幕號

Screen或GNU Screen是一個終端多路復用器程序,它使您可以啟動屏幕會話並在該會話內打開任意數量的窗口(虛擬終端)。 當您的窗口不可見時,即使您已斷開連接,在Screen中運行的進程也會繼續運行。

Tmux#

Tmux是GNU屏幕的現代替代品。 使用Tmux,您還可以創建一個會話並在該會話中打開多個窗口。 Tmux會話是持久性的,這意味着即使您關閉終端,在Tmux中運行的程序仍會繼續運行。

結論#

要在後台運行命令,請包括 & 在命令末尾。

在後台運行命令時,無需等待命令完成即可執行另一條命令。

如果您有任何疑問或反饋,請隨時發表評論。

Nohup Fg Bg Jobs取消碼頭

Sidebar