linux將程式放到後台執行

2021-07-04 07:38:48 字數 1582 閱讀 5833

測試指令碼

test.sh:

i=1while :

doecho $i

sleep 1

((i++))

done

一、當在前台執行某個作業時,終端會被該作業佔據,從而需要再開乙個終端來進行其他的操作,為了避免這種不方便我們可以將作業放到後台執行,主要有兩種方式1、

&命令sh test.sh &

該命令將指令碼放到後台執行,但是標準輸出還是會顯示到當前終端,影響使用者操作,所以最好是將輸出重定向到其他檔案

sh test.sh&>/dev/null

如果需要檢視輸出結果,也可以定向到乙個固定的檔案中。2、

通過ctrl+z;bg

等一系列的命令,將已經在前台執行的作業放到後台執行

如果乙個作業已經在前台執行,可以通

過ctrl+z

將該作業放到後台並掛起。然後通過

jobs

命令檢視在後台執行的作業並找到對應的作業

id,執行

bg %n(n

為通過jobs

查到的作業

id)喚醒該作業繼續執行。

該方式也存在結果會輸出到終端上的情況,同樣可以用重定向的方法解決

jobs------------

檢視在後台執行的程序

fg %n----------

將後台執行程序

n調到前台執行,n表示

jobnumber

(通過jobs

檢視的程序編號,而非

pid)

ctrl+z----------

將在前台執行的程序,放到後台並掛起

bg%n---------

將在後台掛起的程序,繼續執行

ctrl+c----------

前台程序終止

kill %n---------

殺掉後台執行的程序,n表示

jobnumber

(通過jobs

檢視的程序編號,而非

pid)

二、當使用者登出或者網路中斷時,終端後收到

sighup

訊號,從而關閉其所有子程序,以上兩種方式會隨著終端的關閉而退出,如果我們需要作業在後台執行並不受終端退出的影響,可以用下面兩種方式 1

、nohup命令

nohup sh test.sh&>/dev/null &

nohup

命令會忽略

sighup

訊號,從而終端退出時不會影響到後台作業 2

、將作業掛到新的會話下面 (

sh test.sh&>/dev/null &

)或者將

sh test.sh &>/dev/null &

放到另乙個指令碼中執行都可以實現 將

&也放入()後,我們會發現所提交的作業並不在作業列表中,也就是說,是無法通過

jobs

來檢視的,通過

ps檢視發現新的作業的

ppid是1

而不是終端的

pid,所以終端退出後不會影響我們的作業

三、另外

screen

命令也可以實現相應的功能,並能解決程式需要人機互動的問題

linux將程式放到後台執行

測試指令碼test.sh i 1while doecho i sleep 1 i done一 當在前台執行某個作業時,終端會被該作業佔據,從而需要再開乙個終端來進行其他的操作,為了避免這種不方便我們可以將作業放到後台執行,主要有兩種方式 1 命令 sh test.sh 該命令將指令碼放到後台執行,但...

linux程式後台執行

方法 1在終端輸入命令 pso pso.file 2 1 解釋 將 pso直接放在後台執行,並把終端輸出存放在當前目錄下的 pso.file 檔案中。當客戶端關機後重新登陸伺服器後,直接檢視 pso.file 檔案就可看執行結果 命 令 cat pso.file 方法 2在終端輸入命令 nohup....

把ffmpeg放到後台自動執行

最近乙個專案,需要用ffmpeg把rtsp流轉成ts流。由於rtsp伺服器有可能關閉,需要自動的重啟ffmpeg去連線rtsp伺服器 1 編寫乙個用ffmpeg轉ts流的指令碼rtsp2ts.sh ffmpeg i rtsp vcodec mpeg2video b 2048k acodec lib ...