使用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種:
running
,stopped
(程式暫停),terminated
(程序終止)。
不過jobs
只對當前終端有效,在新的終端中將無法查詢,此時就需要使用上文中的ps
命令來查詢後台程序。
ctrl + z
將正在前台執行的程式轉至後台,並掛起(stopped)
ctrl + c
終止前台程式
red hat
中,通過:
kill -stop pid
將後台程序掛起(stopped),其中pid為ps
查詢的程序號。
通過jobs
檢視任務號num
,kill %num
終止程序,
或者通過ps
檢視程序號pid
,kill 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...