當我們在終端或控制台工作時。可能不希望由於執行一個作業而占住了屏幕,由於可能還有更重要的事情要做,比方閱讀電子郵件。
對於密集訪問磁盤的進程,我們更希望它可以在每天的非負荷高峰時間段執行(比如凌晨)。為了使這些進程可以在后台執行,也就是說不在終端屏幕上執行。有幾種選擇方法可供使用。
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 ` done1)使用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(是命令編號,不是進程號)將選中的命令調出。