Linux中的進程管理.ppt_第1頁
Linux中的進程管理.ppt_第2頁
Linux中的進程管理.ppt_第3頁
Linux中的進程管理.ppt_第4頁
Linux中的進程管理.ppt_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第13章 Linux中的進程管理,Linux是一個多用戶、多任務(wù)的操作系統(tǒng)。在這樣的系統(tǒng)中,各種計算機資源(如文件、內(nèi)存、CPU等)的分配和管理都以進程為單位。為了協(xié)調(diào)多個進程對這些共享資源的訪問,操作系統(tǒng)要跟蹤所有進程的活動,以及它們對系統(tǒng)資源的使用情況,從而實施對進程和資源的動態(tài)管理。本章將對Linux的進程管理做詳細的介紹。,13.1 Linux進程概述,程序是存儲在磁盤上包含可執(zhí)行機器指令和數(shù)據(jù)的靜態(tài)實體,而進程是在操作系統(tǒng)中執(zhí)行的特定任務(wù)的動態(tài)實體。Linux系統(tǒng)中每個運行中的程序至少由一個進程組成。每個進程與其他進程都是彼此獨立的,都有自己獨立的權(quán)限與職責。一個用戶的應(yīng)用程序不會干擾到其他用戶的程序或者操作系統(tǒng)本身。 Linux操作系統(tǒng)包括如下三種不同類型的進程,每種進程都有其自己的特點和屬性: 交互進程:由一個shell啟動的進程。交互進程既可以在前臺運行,也可以在后臺運行。 批處理進程:這種進程和終端沒有聯(lián)系,是一個進程序列。 守護進程:Linux系統(tǒng)啟動時啟動的進程,并在后臺運行。 上述三種進程各有各的作用,使用場合也有所不同。,13.2 Linux進程原理,為了更好地對Linux系統(tǒng)的進程進行高效、有針對性地管理,需要對進程的基本原理有所了解,本節(jié)將介紹Linux系統(tǒng)中進程的狀態(tài)以及基本的工作模式。,13.2.1 Linux進程的狀態(tài),通常在操作系統(tǒng)中,進程至少要有三種基本狀態(tài),分別為:運行態(tài)、就緒態(tài)和封鎖態(tài)(或阻塞態(tài))。 在Linux系統(tǒng)中,進程主要有以下幾個狀態(tài): 運行態(tài)(TASK_RUNNING):此時,進程正在運行(即系統(tǒng)的當前進程)或者準備運行(即就緒態(tài)) 等待態(tài):此時進程在等待一個事件的發(fā)生或某種系統(tǒng)資源。Linux系統(tǒng)分為兩種等待進程:可中斷的(TASK_INTERRUPTIBLE)和不可中斷的(TASK_UNINTERRUPTIBLE)??芍袛嗟牡却M程可以被某一信號(Signal)中斷;而不可中斷的等待進程不受信號的打擾,將一直等待硬件狀態(tài)的改變。 停止態(tài)(TASK_STOPPED):進程被停止,通常是通過接收一個信號。正在被調(diào)試的進程可能處于停止狀態(tài)。 僵死態(tài)(TASK_ZOMBIE):由于某些原因被終止的進程,但是該進程的控制結(jié)構(gòu)task_struct仍然保留著。,13.2.2 Linux進程工作模式,在Linux系統(tǒng)中,進程的執(zhí)行模式劃分為用戶模式和內(nèi)核模式。如果當前運行的是用戶程序、應(yīng)用程序或者內(nèi)核之外的系統(tǒng)程序,那么對應(yīng)進程就在用戶模式下運行;如果在用戶程序執(zhí)行過程中出現(xiàn)系統(tǒng)調(diào)用或者發(fā)生中斷事件,就要運行操作系統(tǒng)(即核心)程序,進程模式就變成內(nèi)核模式。在內(nèi)核模式下運行的進程可以執(zhí)行機器的特權(quán)指令;而且,此時該進程的運行不受用戶的干預(yù),即使是root用戶也不能干預(yù)內(nèi)核模式下進程的運行。 按照進程的功能和運行的程序分類,進程可劃分為兩大類:一類是系統(tǒng)進程,只運行在內(nèi)核模式,執(zhí)行操作系統(tǒng)代碼,完成一些管理性的工作,例如內(nèi)存分配和進程切換;另外一類是用戶進程,通常在用戶模式中執(zhí)行,并通過系統(tǒng)調(diào)用或在出現(xiàn)中斷、異常時進入內(nèi)核模式。用戶進程既可以在用戶模式下運行,也可以在內(nèi)核模式下運行。,13.3 Linux守護進程介紹,如上所述,守護進程是Linux系統(tǒng)三大進程之一,而且是系統(tǒng)中比較重要的一種,該進程可以完成很多工作,包括系統(tǒng)管理以及網(wǎng)絡(luò)服務(wù)等,下面就對這些守護進程進行介紹。,13.3.1 守護進程簡介,守護進程(Daemon,也稱為精靈進程)是指在后臺運行而又沒有終端或登錄shell與之結(jié)合在一起的進程。守護進程經(jīng)常在程序啟動時開始運行,在系統(tǒng)結(jié)束時停止。這些進程沒有控制終端,所以稱為在后臺運行。Linux系統(tǒng)有許多標準的守護進程,其中一些周期性地運行來完成特定的任務(wù)(例如crond),而其余的則連續(xù)地運行,等待處理系統(tǒng)中發(fā)生的某些特定的事件(例如xinetd和lpd)。啟動守護進程有如下幾種方法: 在引導(dǎo)系統(tǒng)時啟動:此種情況下的守護進程通常在系統(tǒng)啟動script的執(zhí)行期間被啟動,這些script一般存放在/etc/rc.d中。 人工手動從shell提示符啟動:任何具有相應(yīng)的執(zhí)行權(quán)限的用戶都可以使用這種方法啟動守護進程。 使用crond守護進程啟動:這個守護進程查詢存放在/var/spool/cron/crontabs目錄中的一組文件,這些文件規(guī)定了需要周期性執(zhí)行的任務(wù)。 執(zhí)行at命令啟動:在規(guī)定的日期和執(zhí)行一個程序。,13.3.2 重要守護進程介紹,13.4 啟動Linux進程,在系統(tǒng)中,鍵入需要運行的程序的程序名,執(zhí)行一個程序,其實也就是啟動了一個進程。在Linux系統(tǒng)中每個進程都具有一個進程號,用于系統(tǒng)識別和調(diào)度進程。啟動一個進程有兩個主要途徑:手工啟動和調(diào)度啟動。與前者不同的是:后者是事先進行設(shè)置,根據(jù)用戶要求自行啟動。,13.4.1 手工啟動,1前臺啟動 這是手工啟動一個進程的最常用的方式。一般地,用戶鍵入一個命令“l(fā)s l”,這就已經(jīng)啟動了一個進程,而且是一個前臺的進程。這時候系統(tǒng)其實已經(jīng)處于一個多進程狀態(tài)。在通常情況下,用戶在啟動進程時,系統(tǒng)中已經(jīng)存在了許多運行在后臺的、系統(tǒng)啟動時就已經(jīng)自動啟動的進程。 2后臺啟動 直接從后臺手工啟動一個進程用得比較少一些,除非是該進程甚為耗時,且用戶也不急著要看到處理結(jié)果的時候。假設(shè)用戶要啟動一個要長時間運行的格式化文本文件的進程,為了不使整個shell在格式化過程中都處于“癱瘓”狀態(tài)(長時間看不到任何運行結(jié)果),因此這個時候選擇從后臺啟動進程是明智的選擇,下面是一個后臺啟動進程的例子: #./calculate & /啟動一個后臺計算進程 1 2116 /分配給的該后臺進程的ID號,13.4.2 在指定時刻執(zhí)行命令序列at命令,有時候須要對系統(tǒng)進行一些比較費時而且占用資源的維護工作,這些工作適合在深夜進行,這時候用戶就可以事先進行調(diào)度安排,指定任務(wù)運行的時間或者場合,到時候系統(tǒng)會自動完成這一切工作。用戶使用at命令在指定時刻執(zhí)行指定的命令序列at命令可以只指定時間,也可以時間和日期一起指定。需要注意的是,指定時間有個系統(tǒng)判別問題。比如說:用戶現(xiàn)在指定了一個執(zhí)行時間:凌晨3:20,而發(fā)出at命令的時間是頭天晚上的20:00,那么這將會產(chǎn)生兩種執(zhí)行情況:如果用戶在3:20以前仍然在工作,那么該命令將在這個時候完成;如果用戶3:20以前就退出了工作狀態(tài),那么該命令將在第二天凌晨才得到執(zhí)行。,13.4.3 在資源比較空閑的時候執(zhí)行命令batch命令,batch命令用低優(yōu)先級運行作業(yè),該命令幾乎和at命令的功能完全相同,惟一的區(qū)別在于:at命令是在指定時間,很精確的時刻執(zhí)行指定命令;而batch卻是在系統(tǒng)負載較低,資源比較空閑的時候執(zhí)行命令,這個主要是由系統(tǒng)來決定執(zhí)行的,因而用戶的干預(yù)權(quán)力很小。該命令適合于執(zhí)行占用資源較多的命令。 batch命令的語法格式也和at命令十分相似,如下所示: batch -V -q queue -f file -mv 時間 具體的參數(shù)解釋與at命令相似,這里不再贅述,請參看at命令。一般地說,不用為batch命令指定時間參數(shù),因為batch本身的特點就是由系統(tǒng)決定執(zhí)行任務(wù)的時間,如果用戶再指定一個時間,就失去了該命令本來的意義。 下面給出使用該命令的例子: /使用batch命令執(zhí)行在根目錄下查詢文本文件的功能 #batch at find / -name *.txt at job 14 at 2005-06-11 22:59 注意:batch和at命令都將自動轉(zhuǎn)入后臺,所以啟動的時候并不需要手工添加&符號。,13.4.4 不斷重復(fù)執(zhí)行某些命令cron命令,前面介紹的兩條命令都會在一定時間內(nèi)完成一定任務(wù),但是注意它們都只能執(zhí)行一次。,當系統(tǒng)在指定時間完成任務(wù)后,一切就結(jié)束了。但是在很多時候需要不斷重復(fù)一些命令,比如:某公司每周一自動向員工報告頭一周公司的活動情況,這時候就需要使用cron命令來完成任務(wù)了。 實際上,cron命令是不應(yīng)該手工啟動的。cron命令在系統(tǒng)啟動時就由一個shell腳本自動啟動,進入后臺(所以不需要使用“&”符號)。一般的用戶沒有運行該命令的權(quán)限,雖然超級用戶可以手工啟動cron,不過還是建議將其放到shell腳本中由系統(tǒng)自行啟動。 首先cron命令會搜索/var/spool/cron目錄,尋找以/etc/passwd文件中的用戶名命名的crontab文件,被找到的這種文件將載入內(nèi)存。cron啟動以后,將首先檢查是否有用戶設(shè)置了crontab文件,如果沒有就轉(zhuǎn)入“休眠”狀態(tài),釋放系統(tǒng)資源。所以該后臺進程占用資源極少。它每分鐘“醒”過來一次,查看當前是否有需要運行的命令。命令執(zhí)行結(jié)束后,任何輸出都將作為郵件發(fā)送給crontab的所有者,或者是/etc/crontab文件中MAILTO環(huán)境變量中指定的用戶。,13.4.5 操作cron后臺進程的表格crontab命令,crontab命令用于安裝、刪除或者列出用于驅(qū)動cron后臺進程的表格。用戶把要執(zhí)行的命令序列放到crontab文件中以獲得執(zhí)行。每個用戶都可以有自己的crontab文件。 在/var/spool/cron下的crontab文件不可以直接創(chuàng)建或者直接修改。crontab文件是通過crontab命令得到的。該文件中每行都包括六個域,其中前五個域是指定命令被執(zhí)行的時間,最后一個域是要被執(zhí)行的命令。每個域之間使用空格或者制表符分隔。格式如下(此處用空格符分隔): minute hour day-of-month month-of-year day-of-week commands 第一項是分鐘,第二項是小時,第三項是一個月的第幾天,第四項是一年的第幾個月,第五項是一周的星期幾,第六項是要執(zhí)行的命令。這些項都不能為空,必須填入。如果用戶不需要指定其中的幾項,那么可以使用“*”代替。因為“*”是統(tǒng)配符,可以代替任何字符,所以就可以認為是任何時間,也就是該項被忽略了。在表13.2中給出了每項的合法范圍。,13.5 進程的掛起及恢復(fù),作業(yè)控制允許將進程掛起并可以在需要時恢復(fù)進程的運行,被掛起的作業(yè)恢復(fù)后將從中止處開始繼續(xù)運行。只要在鍵盤上使用組合鍵Ctrl+Z,即可掛起當前的前臺作業(yè)。 #cat text.file 1+ stopped cat text.file #jobs 1+ stopped cat text.file 在鍵盤上按組合鍵Ctrl+Z后,將掛起當前執(zhí)行的命令cat。使用jobs命令可以顯示shell的作業(yè)清單,包括具體的作業(yè)、作業(yè)號以及作業(yè)當前所處的狀態(tài)。 恢復(fù)進程執(zhí)行時,有兩種選擇:用fg命令將掛起的作業(yè)放回到前臺執(zhí)行;用bg命令將掛起的作業(yè)放到后臺執(zhí)行。 假設(shè)用戶正在執(zhí)行消耗資源較多的calculate程序,現(xiàn)在希望查看該程序所消耗的CPU資源以及內(nèi)存的情況。那么就要首先使用組合鍵Ctrl+Z將calculate進程掛起,然后使用bg命令將其在后臺啟動,這樣就得到了前臺的操作控制權(quán),接著鍵入“psx”查看進程情況。查看完畢后,使用fg命令將該進程帶回前臺運行即可。其操作命令步驟如下: #./calculate /執(zhí)行程序 Ctrl+Z /使用組合鍵掛起進程 1+ Stopped ./calculate /表示進程已經(jīng)掛起 #bg ./calculate /將該進程轉(zhuǎn)為后臺執(zhí)行 1+ ./calculate & /表示進程轉(zhuǎn)為后臺執(zhí)行成功 #fg ./calculate / /將該進程轉(zhuǎn)為前臺執(zhí)行 ./calculate /程序恢復(fù)前臺運行 在默認情況下,fg和bg命令對最近停止的作業(yè)進行操作。如果希望恢復(fù)其他作業(yè)的運行,可以在命令中指定要恢復(fù)作業(yè)的作業(yè)號來恢復(fù)該作業(yè)。例如: #fg 1,13.6 Linux進程管理,下面將要詳細介紹幾個進程管理的命令。使用這些命令,用戶可以實時、全面、準確地了解系統(tǒng)中運行進程的相關(guān)信息,從而對這些進程進行相應(yīng)的掛起、中止等操作。 13.6.1 使用ps命令查看進程狀態(tài) ps命令是查看進程狀態(tài)的最常用的命令,可以提供關(guān)于進程的許多信息。根據(jù)顯示的信息可以確定哪個進程正在運行、哪個進程被掛起、進程已運行了多久、進程正在使用的資源、進程的相對優(yōu)先級,以及進程的標識號(PID)等信息。ps命令的一般格式是:ps 選項。 以下是ps命令常用的選項及其含義: -a:顯示系統(tǒng)中與tty相關(guān)的(除會話組長之外)所有進程的信息。 -e:顯示所有進程的信息。 -f:顯示進程的所有信息。 -l:以長格式顯示進程信息。 r:只顯示正在運行的進程。 u:顯示面向用戶的格式(包括用戶名、CPU及內(nèi)存使用情況等信息)。 x:顯示所有非控制終端上的進程信息。 -pid:顯示由進程ID指定的進程的信息。 -tty:顯示指定終端上的進程的信息。,13.6.2 使用top命令查看進程狀態(tài),top命令和ps命令的基本作用是相同的,顯示系統(tǒng)當前的進程及其狀態(tài),但是top是一個動態(tài)顯示過程,可以通過用戶按鍵來不斷刷新當前狀態(tài)。如果在前臺執(zhí)行,該命令將獨占前臺,直到用戶終止該程序為止。top命令的一般格式是:top bciqsSd n 。 其命令參數(shù)的含義如下: b:使用批處理模式。 c:列出程序時,顯示每個程序的完整指令,包括指令名稱、路徑和參數(shù)等相關(guān)信息。 i:執(zhí)行top指令時,忽略閑置或是已成為Zombie的程序。 q:持續(xù)監(jiān)控程序執(zhí)行的狀況。 s:使用保密模式,消除互動模式下的潛在危機。 S:使用累計模式。 d:設(shè)置top監(jiān)控程序執(zhí)行狀況的間隔時間,單位以秒計算。 n:設(shè)置監(jiān)控信息的更新次數(shù)。,13.6.3 使用kill命令終止進程,通常終止一個前臺進程可以使用Ctrl+C組合鍵。但是,對于一個后臺進程就須用kill命令來終止。kill命令是通過向進程發(fā)送指定的信號來結(jié)束相應(yīng)進程。在默認情況下,采用編號為15的TERM信號。TERM信號將終止所有不能捕獲該信號的進程。對于那些可以捕獲該信號的進程就要用編號為9的KILL信號,強行殺掉該進程。 kill命令的一般格式是:kill -s 信號|-p 進程號或者kill -l 信號。其中選項各選項的含義如下: -s:指定要發(fā)送的信號,既可以是信號名(如kill),也可以是對應(yīng)信號的號碼(如9)。 -p:指定kill命令只是顯示進程的pid(進程標識號),并不真正發(fā)出結(jié)束信號。 -l

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論