Linux作業管理,linux作業
在介紹作業管理之前需要Crowdsourced Security Testing道,作業管理是在bash環境下使用的。也就是說“當登入系統擷取bash shell之後,在單一終端介面下,同時管理多個作業”。這樣應該瞭解到:管理作業時,其實每個作業都是當前bash的子程式,即彼此之間是有關聯的。我們無法以作業管理的方式由tty1的環境去管理tty2的bash。
直接將命令放到後台“執行”的&
在bash的環境下, 前台指:你可以控制的作業。後台指:在記憶體可以自行啟動並執行作業,你無法直接控制它,除非以bg/fg等命令將該作業調用出來。
範例:
[root@redflag ~]# tar –zpcf /tmp/etc.tar.gz /etc &[1] 24874 <== [job number] PID[root@redflag ~]# <==可以繼續工作,不受影響。
這裡job1在後台繼續工作,你可在前台繼續操作linux。過了一會,會突然出現這個資料:
[1] + Done tar –zpcf /tmp/etc.tar.gz /etc #這是表示[1]作業已經完成
該命令最大的好處就是不怕被“[Ctrl]+c”這個中斷指令來中斷了
這裡就會出現一個問題,如果上面的命令是
[root@redflag ~]# tar –zpcvf /tmp/etc.tar.gz /etc &
這時在後台執行的命令,如果有stdout和stderr時,它的資料是輸出到螢幕上,所以我們無法看到提示符,也就無法完好地控制前台作業。所以,最好是使用資料流重導向,將輸出資料傳至某個檔案中。我們可以這樣做:
[root@redflag ~]# tar –zpcvf /tmp/etc.tar.gz /etc > tpm/log.txt 2>&1 &
這樣,資料都傳送到/tmp/log.txt中,自然不會影響到前台作業。
將“當前”作業放到後台“暫停”:[crtl]+Z
如果你進行中vi,但你想尋找某個檔案,需要到bash環境搜尋。此時你可以暫時離開vi
[root@redflag ~]# vi ~/.bashrc # 在vi 的一般模式下,按ctrl+z[1]+ Stopped /usr/bin/vim ~/.bashrc #(+)表示當前在後台下預設的作業[root@redflag ~]# <== 擷取了前台的控制權
觀察當前後台作業狀態:jobs
[root@redflag ~]# jobs [-lrs] 參數: -l:除了列出作業號之外,同時列出PID -r:僅列出正在後台啟動並執行作業 -s:僅列出正在後台暫停作業
範例:
[rot@redflag ~]# jobs –l [1]+ 24988 Stopped /usr/bin/vim ~/.bashrc [2]- 25006 Stopped /usr/bin/vim ~/.bash_history
一般來說,直接執行jobs即可。在上面的輸出中,有(+ -)號。(+)表示預設的作業。所以說“當前我有兩個作業在後台,兩個作業都是暫停,如果我僅輸入fg時,那麼[1]會被拿到前台處理”
將後台作業拿到前台處理,fg
[root@redflag ~]# fg %jobnumber
範例:
[root@redflag ~]# jobs [1]+ 24988 Stopped /usr/bin/vim ~/.bashrc [2]- 25006 Stopped /usr/bin/vim ~/.bash_history [root@redflag ~]# fg <==預設取出+的作業,即[1] [root@redflag ~]# fg %2 <==直接規定取出的作業號碼
作業在後台運行:bg
之前都是將作業放到後台去“暫停”,而bg實現一個作業在後台運行。
[root@redflag ~]# find / -perm +7000 #此時,請立刻按ctrl+z暫停 [1]+ stopped find / -perm +7000 [root@redflag ~]# [root@redflag ~]# jobs ; bg %1 ; jobs [1]+ Stopped find / -perm + 7000 [1]+ find / -perm +7000 & [1]+ Running find / -perm +7000 &
此時Stopped變成了Running,命令列的最後多了一個&符號,表示該作業在後台啟動了。
注意:1-5操作過程中“%jobnumber”可以將“%”省略直接加jobnumber即可。
管理後台作業:kill
[root@redflag ~]# kill –signal %jobnumber [root@redflag ~]# kill –l 參數: -l:列出當前kill能夠使用的訊號(注意是小寫L) -1:重新讀取一次參數的設定檔案(類似reload) ---對應的訊號為SIGHUP -2:表示與由鍵盤輸入ctrl+c同樣的動作 ---對應的訊號為SIGINT -9:立刻強制移除一個作業 ---對應的訊號為SIGKILL -15:以正常方式終止一項作業 ---對應的訊號為SIGTERM [root@redflag ~]# jobs [1]+ Stopped vim bashrc [root@redflag ~]# kill -9 %1 #以強制方式刪除 [1]+ 已刪除 vim bashrc [root@redflag ~]# kill –SIGTERM %1 #-SIGTERM與15是一樣的
說明一下以正常方式與強制方式來終止作業的區別:例如,用vi編輯檔案的時候會產生一個.filename.swp檔案,如果以正常方式來結束作業,那麼.filename.swp檔案會主動被刪除;相反以強制的方式來結束作業,那麼.filename.swp檔案會繼續存在檔案系統中。
注意:kill可以幫我們將訊號傳送給某個作業(%jobnumber)或者是某個PID(直接輸入數字),也就是說,kill後面直接加數字與加上%的情況是不同的。