在介紹作業管理之前需要先知道,作業管理是在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
中,自然不會影響到前台作業。
如果你正在進行vi
,但你想查詢某個檔案,需要到bash
環境搜尋。此時你可以暫時離開vi
[root@redflag ~]# vi ~/.bashrc # 在vi 的一般模式下,按ctrl+z
[1]+ stopped /usr/bin/vim ~/.bashrc #(+)表示當前在後台下預設的作業
[root@redflag ~]# <== 獲取了前台的控制權
[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]
會被拿到前台處理」
[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
實現乙個作業在後台執行。
[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
即可。
[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
後面直接加數字與加上%
的情況是不同的。
linux 作業管理
將 當前 作業放到後台 暫停 ctrl z 觀察當前後台作業狀態 jobs 引數 l 除了列出作業號之外同時列出pid r 列出僅在後台執行 run 的作業 s 僅列出暫停的作業3.將後台作業拿到前台處理 fg fg jobnumber 可有可無 讓作業在後台執行 bg ctrl z讓當前作業到後台...
linux程序及作業管理(三) 作業管理
linux系統作業控制 job 前台作業 foregroud 通過終端啟動,且啟動後會一直佔據終端 後台作業 backgroud 可以通過終端啟動,但啟動後即轉入後台執行 釋放終端 如何讓作業執行於後台?1 執行中的作業 ctrl z 相當於19號訊號 注意 送往後台後,作業會轉為停止態 2 尚未啟...
Linux程序及作業管理
核心的作用 程序管理 檔案系統 網路功能 記憶體管理 驅動程式 安全功能 process 執行中的程式的乙個副本,存在生命週期 linux核心儲存程序資訊的固定格式 task struck,多個任務的task struck元件鍊錶 task list 程序建立 init 父子關係 程序 都有其父程序...