1. 程式人生 > >後臺執行命令:&和nohup command & 以及關閉、檢視後臺任務

後臺執行命令:&和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(是命令編號,不是程序號)將選中的命令調出。