Linux作業管理

2021-07-03 08:13:52 字數 3726 閱讀 4360

在介紹作業管理之前需要先知道,作業管理是在bash環境下使用的。也就是說「當登入系統獲取bash shell之後,在單一終端介面下,同時管理多個作業」。這樣應該了解到:管理作業時,其實每個作業都是當前bash的子程式,即彼此之間是有關聯的。我們無法以作業管理的方式由tty1的環境去管理tty2bash

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 &
這時在後台執行的命令,如果有stdoutstderr時,它的資料是輸出到螢幕上,所以我們無法看到提示符,也就無法完好地控制前台作業。所以,最好是使用資料流重導向,將輸出資料傳至某個檔案中。我們可以這樣做:

[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 父子關係 程序 都有其父程序...