2020年11月30日 星期一

Linux 切換 process 到背景執行

在 Linux,如果要同時跑多個指令,可以利用 nohup 將 process 放到背景執行

nohup /path/my_program &

預設執行結果存到 ./nohup.txt。


如果不想儲存執行結果

nohup /path/my_program >/dev/null &


也可以自訂儲存路徑

nohup /path/my_program >my_log.txt &


如果 standard error 也是輸出到畫面上,個別儲存的方式是

nohup /path/my_program >my.out 2>my.err & 


合併儲存的方式是 

nohup /path/my_program 2>&1 my_log.txt &


以上是 nohup 常用操作。


nohup 有個缺點是不能把背景執行切換到前景,這時就需要另一個工具:screen。 


首先,啟動 process

screen

 

接著執行你需要的指令,例如

tail -f /var/log/kernal.log


再來把 process 切換到背景執行,所要使用的是鍵盤快速鍵操作

Ctrl + A + D


你會回到執行 screen 前的 bash 環境,這時候 process 已經切換到背景執行,可以使用 ps 指令確認。 


process 切換到背景執行的好處是:可以登出,不怕斷線。


如果想要回到指令畫面,看執行結果,先找到 process ID

screen -ls

會得到類似的畫面

 There is a screen on:

        3449.pts-0.ip-10-44-204-199     (Detached)

1 Socket in /var/run/screen/S-ssm-user.

3449 就是 process ID

切換到前景執行的指令是

screen -r 3449


以上是 screen 常用操作。