通常,當您在終端中運行命令時,必須等到命令完成後才能輸入另一個命令。這稱為在前台或前台進程中運行命令。當某個進程在前台運行時,它將佔用您的shell,並且您可以使用輸入設備與之交互。
如果命令需要很長時間才能完成,而同時又要運行其他命令怎麼辦?您有幾種選擇可以使用。最明顯和直接的選擇是啟動一個新的Shell會話並在其中運行命令。另一種選擇是在後台運行命令。
後台進程是從終端啟動並在後台運行而無需用戶交互的進程/命令。
在本文中,我們將討論Linux後台進程。我們將向您展示如何在後台啟動命令以及如何在Shell會話關閉後保持進程運行。
在後台運行Linux命令
要在後台運行命令,請在命令末尾添加“&”符號(&):
command &Shell作業ID(用括號括起來)和進程ID將打印在終端上:
[1] 25177您可以同時在後台運行多個進程。
後台進程將繼續向您從中調用命令的終端寫入消息。要禁止顯示stdout和stderr消息,請使用以下語法:
command > /dev/null 2>&1 & >/dev/null 2>&1表示將stdout重定向到/dev/null,將stderr重定向到stdout。
使用jobs 命令顯示當前shell會話中所有已停止和後台進程的狀態:
jobs -l輸出包括作業編號,進程ID,進程狀態以及啟動該進程的命令:
[1]+ 25177 Running ping google.com &要將後台進程置於前台,請使用fg命令:
fg如果您有多個後台作業,請在命令後添加%和作業ID:
fg %1要終止後台進程,請使用 kill 命令,後跟進程ID:
kill -9 25177將前台進程移至後台
要在後台移動正在運行的前台進程:
- 通過鍵入Ctrl+Z停止進程。
- 通過鍵入bg將停止的進程移至後台。
在Shell退出後保持後台進程運行
如果連接斷開或退出Shell會話,則後台進程將終止。在交互式shell會話結束後,有幾種方法可以使進程保持運行。
一種方法是使用內置的disown shell從shell的作業控件中刪除作業:
disown如果您有多個後台作業,請在命令後添加%和作業ID:
disown %1確認使用jobs -l命令從活動作業表中刪除了該作業。要列出所有正在運行的進程,包括未運行的進程,請使用 ps aux 命令。
使進程退出Shell後仍保持運行的另一種方法是使用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 Screen的現代替代方案。使用Tmux,您還可以創建一個會話並在該會話中打開多個窗口。 Tmux會話是持久性的,這意味着即使您關閉終端,在Tmux中運行的程序仍會繼續運行。
結論
要在後台運行命令,請在命令末尾包含&。當您在後台運行命令時,不必等到命令完成就可以執行另一條命令。
如果您有任何問題或反饋,請隨時發表評論。
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/230040.html
微信掃一掃
支付寶掃一掃