如何在背景執行任務?

如何在背景執行任務?

是否可以在背景執行從終端啟動的任務或腳本?

答案1

這裡有多個答案,取決於您想要的內容(這個答案在 shell 中有效bashzsh其他答案可能會有所不同)。

如果您需要在後台運行一個命令並且您在運行它之前知道它,只需&在命令末尾添加一個(使用sleep 60,在 1 分鐘內不執行任何操作,作為示例命令):

[romano:~] % sleep 60 &
[1] 9054
1& [romano:~] %

如果您已經運行它,您可以使用ctrl-停止它Z,當 shell 給出提示時,您可以使用以下命令將其背景運行bg

1& [romano:~] % sleep 60  
^Z
[1]  + 9084 suspended  sleep 60
1z [romano:~] 20 % bg
[1]  + 9084 continued  sleep 60
1& [romano:~] % 

在這兩種情況下,進程/作業仍然附加到您的終端;如果你關閉你的終端掛斷(HUP) 訊號被傳送到進程 --- 大多數進程將優雅地退出。如果您需要確保該過程繼續進行,您可以透過以下方式啟動:

nohup sleep 60 & 

bg或者,在使用或 簡單地將其發送到後台後&,告訴 shell 忘記它,使用:

disown %% 

(%%是一個作業控制快捷方式,這裡代表後台發送的最後一個進程)。

然後你必須考慮進程的輸出——在前兩種情況下,輸出仍然會到達終端;在前兩種情況下,輸出仍然會到達終端。在這種情況下,nohup它將被轉移到一個名為 的檔案上nohup.out,而在後一種情況下(使用disown),它將轉到終端,除非您關閉它,在這種情況下,行為完全未定義的。最好使用以下命令自行處理後台進程的輸出:重定向

答案2

添加&到命令中。

例子:

$ cp FromA ToB &

答案3

此範例將在背景運行更新:

sudo apt-get dist-upgrade -y &

只需注意單 &。
如果您想隱藏標準輸出,請執行以下操作:

sudo apt-get dist-upgrade -y > /dev/null &

答案4

如果您想要更高級,並且希望稍後能夠在本地或透過 SSH 使用會話,您可以使用 screen。

# screen
# apt-get update -y

然後按CTRL+,A然後按D

稍後您可以重新連線:

# screen -rd

相關內容