是否可以在背景執行從終端啟動的任務或腳本?
答案1
這裡有多個答案,取決於您想要的內容(這個答案在 shell 中有效bash
,zsh
其他答案可能會有所不同)。
如果您需要在後台運行一個命令並且您在運行它之前知道它,只需&
在命令末尾添加一個(使用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