Skip to main content

Linux application running in backhround

·150 words·1 min
KDEO
Author
KDEO
A little bit about you

讓command在背景跑
#

在要跑的指令結尾加上 &

jupyterlab &
指令和 & 中間通常會空一格

同時又不會output

/path/to/your/script.sh > /dev/null 2>&1 &

1 代表螢幕輸出,2 代表錯誤輸出

檢視背景執行的process
#

jobs

Kill掉特定背景程式
#

kill %1

最後面的數字是取決於jobs給的number (會從1開始)

[1]-  Running                 sleep 100 &
[2]+  Running                 sleep 200 &

讓ssh連線detach後程序能繼續跑
#

接在已經背景執行的程序後

disown  -h  %1

或是可以在下背景時同時搭配nohup

nohup jupyterlab &

nohup會把原本output到terminal的東西給寫到nohup.out

如果你的指令會一直輸出內容,就有可能讓nohup.out 這個檔案異常巨大

可以搭配上面的> /dev/null 2>&1 會將所有輸出直接丟掉

nohup /path/to/your/script.sh > /dev/null 2>&1 &

其他套件
#

還能用像是screen/ tmux來假裝連線一直都在

把命令放到背景執行
#

Linux 允許把命令放到背景中執行,僅僅需要在命令的最後加上一個 &,就可以利用 Linux 的多工特性執行多個背景程式,如以下:

bang@linuxdiary:~$ sleep 300 &
  • [1] 代表指定給該工作的序號
  • 8521 代表 PID (process ID)

若想查詢當前的背景工作可使用 jobs

指令,

bang@linuxdiary:~$ jobs

但如果後悔把命令放入背景時怎麼辦?你可以利用 fg 命令把工作帶回前景 (foreground);如果背景中堆積了好幾個命令,可用行程識別碼或工作序號來挑選他們。

bang@linuxdiary:~$ fg %1

bang@linuxdiary:~$ fg 8521

正在前景中執行的 sleep 300 是否困擾著你,可以不要等待嗎? 是的~ 可以

此時你可以點擊鍵盤上的組合鍵 Ctrl + Z ( 暫停程序,並將程序放置背景 )

bang@linuxdiary:~$ fg %1

但此時的工作是暫停的,若希望它能繼續在背景中執行,可利用 bg 命令恢復在背景(background) 中暫停的工作。

bang@linuxdiary:~$ bg %1

如果想要刪除在背景的工作可用 kill 來完成

bang@linuxdiary:~$ kill %2

最後介紹的指令,將對常用 ssh 遠端登入的使用者很有幫助,nohup

(no hang up,不要掛斷)。當使用者利用 ssh 等指令或軟體登入主機後,想要執行某個指令,但一旦登出或關掉 ssh 軟體,那個在背景執行的工作會跟著消失,主要原因是它的父行程被關閉了,也就是使用者剛剛關閉的 bash,那怎麼辦?nohup 可以為您強制保存背景工作,即便父行程被關閉,以下為示範

bang@linuxdiary:~$ nohup sleep 500 &

此時關閉 shell,重新登入

bang@linuxdiary:~$ ps -fC sleep