Linux下在後台執行命令

2022-08-31 16:36:22 字數 2852 閱讀 1544

使用ssh會話在遠端linux伺服器執行命令時,如果由於網路問題終端斷開連線,則正在前台執行命令也會隨之終止,為了解決這個問題,就需要將命令放在後台執行,並且退出當前終端也不會終止程序。

command &

在要執行的命令後加&表示將此程序放在後台執行,程式中的輸出依然會在前台顯示。

如果希望繼續在當前終端工作的話,可以用以下命令將輸出重定向到檔案中:

command > out.file 2>&1 &

命令中引數的含義見下文nohup命令

上述命令執行後,會顯示出程序號。也可自己查詢程序號:

ps -ef | grep

其中查詢python程序:

ps -ef | grep python

殺死程序號為pid的程序:

kill pid

當ssh會話沒有斷開或使用者未退出時,使用&執行的命令會在後台安靜的執行。

但當使用者退出或由於意外斷開連線時,命令依然會終止

nohup在維基百科中的定義:

nohup 是乙個 posix 命令,用於忽略 sighup ("signal hang up" 譯:結束通話訊號) 。 sighup訊號是終端登出時所傳送至程式的乙個訊號。nohup命令,在預設情況下(非重定向時),會輸出乙個名叫 nohup.out 的檔案到終端上。

也就是說,nohup可以防止終端登出時導致的程序終止。

通常將nohup&命令放在一起使用:

nohup command &

此時命令將在後台執行,且斷開ssh會話或退出當前使用者都不會終止程序。

nohup命令預設將程式所有的輸出儲存到當前目錄的nohup.out檔案中,也可以指定輸出檔案:

nohup command > out.file 2>&1 &

其中> out.file將輸出指定到out.file檔案,2>&1將標準錯誤資訊重定向到標準輸出(0,1,2分別代表stdin標準輸入,stdout標準輸出,stderr標準錯誤),最後的&即為轉到後台執行。

注意:程式轉入後台執行之後,最好使用exit來退出當前使用者,否則可能由於非正常退出導致程序意外終止。

nohup會將輸出或錯誤資訊列印到nohup.out檔案中,我們需要在程式執行結束之後檢視該檔案,用來檢視程式執行過程或檢查程式是否正常執行。

linux中通常用tail命令來檢視日誌檔案,tail命令引數如下:

-f 迴圈讀取

-q 不顯示處理資訊

-v 顯示詳細的處理資訊

-c《數目》 顯示的位元組數

-n《行數》 顯示行數

--pid=pid 與-f合用,表示在程序id,pid死掉之後結束.

-q, --quiet, --silent 從不輸出給出檔名的首部

-s, --sleep-interval=s 與-f合用,表示在每次反覆的間隔休眠s秒

此處我們也將nohup.out看作日誌檔案,以下命令表示檢視nohup.out檔案的最後5行:

tail -n 5 nohup.out

jobs用來檢視當前終端有哪些後台程序

jobs -l可以顯示後台任務的程序號

jobs命令的輸出結果中,+表示是當前的作業,-表示是當前作業的下乙個作業。

任務的狀態分為3種:

runningstopped(程式暫停),terminated(程序終止)。

不過jobs只對當前終端有效,在新的終端中將無法查詢,此時就需要使用上文中的ps命令來查詢後台程序。

ctrl + z將正在前台執行的程式轉至後台,並掛起(stopped)

ctrl + c終止前台程式

red hat中,通過:

kill -stop pid

將後台程序掛起(stopped),其中pid為ps查詢的程序號。

通過jobs檢視任務號numkill %num終止程序,

或者通過ps檢視程序號pidkill pid終止程序。

fg命令將後台程式轉至前台執行,若有多個後台程序,則用fg %num將後台程序num轉至前台。

bg將掛起的任務程序重新啟動,若有多個後台程序,則用bg %num將後台任務num重新啟動。

注意:上述num是通過jobs命令查詢到的後台程序號,而非ps查詢的程序號pid

在後台執行Linux命令的方法

通常情況下,當你在終端執行乙個命令,在你開始輸入另外乙個命令之前程式設計客棧,你必須等待當前命令執行結束。這被稱為在前程式設計客棧臺執行命令,或者前台程序。當乙個程序在前台執行時,它占用了你的 shell,並且你可以通過輸入裝置和它進行互動。那麼當乙個命令執行需要很長時間,而你又想同時執行另外的命令...

linux shell 在後台執行命令

前台當在前台執行命令時,shell將一直等到命令執行完畢,shell會給出提示符,使使用者可以繼續輸入下一條命令。當命令在後台執行時,不必等待該命令完成 就可以直接執行另一條命令。作業是指由乙個或者 通過 管道連線的 多個命令組成的序列。前台只能有乙個作業位於視窗或者螢幕中,但可以有多個作業在後台執...

Linux下在後台啟動程式 nohup 輸出重定向

前情提要 當前有乙個helloword.sh指令碼,其中執行的是乙個py指令碼。python helloword.pyprint hello word 後台執行任務 nohup sh helloword.sh output.txt 2 1 nohup sh x helloword.sh output...