后台運行命令:&和nohup command & 以及關閉、查看后台任務


      當我們在終端或控制台工作時。可能不希望由於執行一個作業而占住了屏幕,由於可能還有更重要的事情要做,比方閱讀電子郵件。

對於密集訪問磁盤的進程,我們更希望它可以在每天的非負荷高峰時間段執行(比如凌晨)。為了使這些進程可以在后台執行,也就是說不在終端屏幕上執行。有幾種選擇方法可供使用。


1、& 

當在前台執行某個作業時。終端被該作業占領;能夠在命令后面加上& 實現后台執行。

比如:sh test.sh &

適合在后台執行的命令有f i n d、費時的排序及一些s h e l l腳本。在后台執行作業時要當心:須要用戶交互的命令不要放在后台執行,由於這樣你的機器就會在那里傻等。

只是。作業在后台執行一樣會將結果輸出到屏幕上,干擾你的工作。假設放在后台執行的作業會產生大量的輸出,最好使用以下的方法把它的輸出重定向到某個文件里:

command  >  out.file  2>&1  &
這樣,全部的標准輸出和錯誤輸出都將被重定向到一個叫做out.file 的文件里。

注意:當你成功地提交進程以后,就會顯示出一個進程號。能夠用它來監控該進程,或殺死它。(ps -ef | grep 進程號     或者   kill -9 進程號)

2、nohup命令:

使用&命令后,作業被提交到后台執行。當前控制台沒有被占用,可是一但把當前控制台關掉(退出帳戶時),作業就會停止執行。nohup命令能夠在你退出帳戶之后繼續執行對應的進程。

nohup就是不掛起的意思( no hang up)。

該命令的一般形式為: nohup command &

假設使用nohup命令提交作業,那么在缺省情況下該作業的全部輸出都被重定向到一個名為nohup.out的文件里,除非另外指定了輸出文件: 

nohup command > myout.file 2>&1


【實例】

nohup.sh

i=1
while [ $i -le 100000 ] 
do
echo $i >> result.txt
i=` expr $i + 1 `
done
1)使用sh  nohup.sh 運行。當前命令行就會hang住,如圖:



2)使用sh  nohup.sh  & 運行,就會把作業提交到后台,釋放當前命令行。同一時候顯示了進程號。可是假設幫當前命令窗體關閉,整個作業就停止了;


注:能夠使用ps  -ef | grep nohup.sh 來查看后台作業執行情況。


3)使用nohup  sh  nohup.sh > log 2>1& &  。相同把作業提交到后台。釋放當前窗體;並且即使把當前命令窗體關閉,作業仍然執行。

注:使用nohup運行命令,不會返回當前進程號,要跟蹤后台作業,能夠使用jobs命令查看;或者使用 ps  -ef | grep nohup.sh 來查看


3、ctrl + z
 能夠將一個正在前台運行的命令放到后台,而且處於暫停狀態。


4、Ctrl+c

  終止前台命令。


5、jobs
查看當前有多少在后台執行的命令。
jobs -l選項可顯示全部任務的PID,jobs的狀態能夠是running, stopped, Terminated。可是假設任務被終止了(kill),shell 從當前的shell環境已知的列表中刪除任務的進程標識。


6、bg
將一個在后台暫停的命令。變成在后台繼續運行。假設后台中有多個命令,能夠用bg %jobnumber將選中的命令調出。
如圖,先前台執行一個腳本,然后轉到后台。查看后台作業情況



7、fg
將后台中的命令調至前台繼續執行。

假設后台中有多個命令。能夠用fg %jobnumber(是命令編號,不是進程號)將選中的命令調出。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM