Linux下的作業管理
轉自 http://blog.csdn.net/ancient_wind/article/details/9858907
程序的一個比較正式的定義是:在自身的虛擬地址空間執行的一個單獨的程式。
Linux作業系統包括三種不同型別的程序,每種程序都有自己的特點和屬性。
互動程序——由一個shell啟動的程序。互動程序既可以在前臺執行,也可以在後臺執行。
批處理程序——這種程序和終端沒有聯絡,是一個程序序列。
監控程序(也稱守護程序)——Linux系統啟動時啟動的程序,並在後臺執行。
程序和作業的概念也有區別。一個正在執行的程序稱為一個作業,而且作業可以包含一個或多個程序,尤其是當使用了管道和重定向命令。例如“nroff -man ps.1|grep kill|more”這個作業就同時啟動了三個程序。
作業控制指的是控制正在執行的程序的行為。比如,使用者可以掛起一個程序,等一會兒再繼續執行該程序。shell將記錄所有啟動的程序情況,在每個程序過程中,使用者可以任意地掛起程序或重新啟動程序。作業控制是許多shell(包括bash和
一般而言,程序與作業控制相關聯時,才被稱為作業。
在大多數情況下,使用者在同一時間只執行一個作業,即它們最後向shell鍵入的命令。但是使用作業控制,使用者可以同時執行多個作業,並在需要時在這些作業間進行切換。這會有什麼用途呢?例如,當用戶編輯一個文字檔案,並需要中止編輯做其他事情時,利用作業控制,使用者可以讓編輯器暫時掛起,返回shell提示符開始做其他的事情。其他事情做完以後,使用者可以重新啟動掛起的編輯器,返回到剛才中止的地方,就象使用者從來沒有離開編輯器一樣。這只是一個例子,作業控制還有許多其他實際的用途。
直接將命令放到後臺“
在bash的環境下,
前臺指:你可以控制的作業
後臺指:在記憶體可以自行執行的作業,你無法直接控制它,除非以bg/fg等命令將該作業調用出來。
範例:
[[email protected] ~]# tar –zpcf /tmp/etc.tar.gz /etc &
[1] 24874 <== [job number] PID [[email protected] ~]# <==可以繼續工作,不受影響。 這裡job1在後臺繼續工作,你可在前臺繼續操作linux。過了一會,會突然出現這個資料: [1] + Done tar –zpcf /tmp/etc.tar.gz /etc #這是表示[1]作業已經完成 該命令最大的好處就是不怕被“[Ctrl]+c”這個中斷指令來中斷了 這裡就會出現一個問題,如果上面的命令是 [[email protected] ~]# tar –zpcvf /tmp/etc.tar.gz /etc & |
[[email protected] ~]# tar –zpcvf /tmp/etc.tar.gz /etc > tpm/log.txt 2>&1 & |
二、 將“當前”作業放到後臺“暫停”:[crtl]+Z
如果你正在進行vi,但你想查詢某個檔案,需要到bash環境搜尋。此時你可以暫時離開vi
[[email protected] ~]# vi ~/.bashrc
# 在vi 的一般模式下,按ctrl+z [1]+ Stopped /usr/bin/vim ~/.bashrc #(+)表示當前在後臺下預設的作業 [[email protected] ~]# <== 獲取了前臺的控制權 |
[[email protected] ~]# jobs [-lrs]
引數:
-l:除了列出作業號之外,同時列出PID
-r:僅列出正在後臺執行的作業
-s:僅列出正在後臺暫停的作業
範例:
[[email protected] ~]# jobs –l
[1]+ 24988 Stopped /usr/bin/vim ~/.bashrc [2]- 25006 Stopped /usr/bin/vim ~/.bash_history |
四、 將後臺作業拿到前臺處理,fg
[[email protected] ~]# fg %jobnumber
範例:
[[email protected] ~]# jobs
[1]+ 24988 Stopped /usr/bin/vim ~/.bashrc [2]- 25006 Stopped /usr/bin/vim ~/.bash_history [[email protected] ~]# fg <==預設取出+的作業,即[1] [[email protected] ~]# fg %2 <==直接規定取出的作業號碼 |
之前都是將作業放到後臺去“暫停”,而bg實現一個作業在後臺執行。
[[email protected] ~]# find / -perm +7000
#此時,請立刻按ctrl+z暫停 [1]+ stopped find / -perm +7000 [[email protected] ~]# [[email protected] ~]# jobs ; bg %1 ; jobs [1]+ Stopped find / -perm + 7000 [1]+ find / -perm +7000 & [1]+ Running find / -perm +7000 & |
注意:1-5操作過程中“%jobnumber”可以將“%”省略直接加jobnumber即可。
六、 管理後臺作業:kill
[[email protected] ~]# kill –signal %jobnumber
[[email protected] ~]# kill –l
引數:
-l:列出當前kill能夠使用的訊號(注意是小寫L)
-1:重新讀取一次引數的設定檔案(類似reload) ---對應的訊號為SIGHUP
-2:表示與由鍵盤輸入ctrl+c同樣的動作 ---對應的訊號為SIGINT
-9:立刻強制刪除一個作業 ---對應的訊號為SIGKILL
-15:以正常方式終止一項作業 ---對應的訊號為SIGTERM
[[email protected] ~]# jobs
[1]+ Stopped vim bashrc [[email protected] ~]# kill -9 %1 #以強制方式刪除 [1]+ 已刪除 vim bashrc [[email protected] ~]# kill –SIGTERM %1 #-SIGTERM與15是一樣的 |
說明一下以正常方式與強制方式來終止作業的區別:例如,用vi編輯檔案的時候會產生一個.filename.swp檔案,如果以正常方式來結束作業,那麼.filename.swp檔案會主動被刪除;相反以強制的方式來結束作業,那麼.filename.swp檔案會繼續存在檔案系統中。
注意:kill可以幫我們將訊號傳送給某個作業(%jobnumber)或者是某個PID(直接輸入數字),也就是說,kill後面直接加數字與加上%的情況是不同的。