這篇文章主要介紹“如何理解Linux系統(tǒng)的進程管理機制”,在日常操作中,相信很多人在如何理解Linux系統(tǒng)的進程管理機制問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何理解Linux系統(tǒng)的進程管理機制”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
為天門等地區(qū)用戶提供了全套網(wǎng)頁設計制作服務,及天門網(wǎng)站建設行業(yè)解決方案。主營業(yè)務為網(wǎng)站制作、網(wǎng)站建設、天門網(wǎng)站設計,以傳統(tǒng)方式定制建設網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!一 、進程的概念和分類
1.進程的概念
Linux是一個多用戶多任務的操作系統(tǒng)。
多用戶是指多個用戶可以在同一時間使用同一個linux系統(tǒng);
多任務是指在Linux下可以同時執(zhí)行多個任務,更詳細的說,linux采用了分時管理的方法,所有的任務都放在一個隊列中,操作系統(tǒng)根據(jù)每個任務的優(yōu)先級為每個任務分配合適的時間片,每個時間片很短,用戶根本感覺不到是多個任務在運行,從而使所有的任務共同分享系統(tǒng)資源,這就是多任務的概念。
上面說的是單CPU多任務操作系統(tǒng)的情形,在這種環(huán)境下,雖然系統(tǒng)可以運行多個任務,但是在某一個時間點,CPU只能執(zhí)行一個進程,而在多CPU多任務的操作系統(tǒng)下,由于有多個CPU,所以在某個時間點上,可以有多個進程同時運行。
進程的的基本定義是:在自身的虛擬地址空間運行的一個獨立的程序,從操作系統(tǒng)的角度來看,所有在系統(tǒng)上運行的東西,都可以稱為一個進程。
需要注意的是:程序和進程的關系可以是多對多關系!
2.進程的分類
按照進程的功能和運行的程序分類,進程可劃分為兩大類:
l) 系統(tǒng)進程:可以執(zhí)行內(nèi)存資源分配和進程切換等管理工作;而且,該進程的運行不受用戶的干預,即使是root用戶也不能干預系統(tǒng)進程的運行。
2) 用戶進程:通過執(zhí)行用戶程序、應用程序或內(nèi)核之外的系統(tǒng)程序而產(chǎn)生的進程,此類進程可以在用戶的控制下運行或關閉。
針對用戶進程,又可以分為交互進程、批處理進程和守護進程三類。
3) 交互進程:由一個shell終端啟動的進程,在執(zhí)行過程中,需要與用戶進行交互操作,可以運行于前臺,也可以運行在后臺。
4) 批處理進程:該進程是一個進程集合,負責按順序啟動其他的進程。
5) 守護進程:守護進程是一直運行的一種進程,經(jīng)常在linux系統(tǒng)啟動時啟動,在系統(tǒng)關閉時終止。它們獨立于控制終端并且周期性的執(zhí)行某種任務或等待處理某些發(fā)生的事件。例如httpd進程,一直處于運行狀態(tài),等待用戶的訪問。還有經(jīng)常用的crond進程,這個進程類似與windows的計劃任務,可以周期性的執(zhí)行用戶設定的某些任務。
3.進程的屬性
(1)進程的幾種狀態(tài)
(2)進程之間的關系
在linux系統(tǒng)中,進程ID(用PID表示)是區(qū)分不同進程的標識,它們的大小是有限制的,較大ID為32768,用UID和GID分別表示啟動這個進程的用戶和用戶組。所有的進程都是PID為1的init進程的后代,內(nèi)核在系統(tǒng)啟動的最后階段啟動init進程,因而,這個進程是linux下所有進程的父進程,用PPID表示父進程。所以如果init進程被kill,則意味著所有進程就kill,那系統(tǒng)會重啟或關閉
舉例:ps命令輸出的httpd進程信息:
相對于父進程,就存在子進程,一般每個進程都必須有一個父進程,父進程與子進程之間是管理與被管理的關系,當父進程停止時,子進程也隨之消失,但是子進程關閉,父進程不一定終止。
如果父進程在子進程退出之前就退出,那么所有子進程就變成的一個孤兒進程,如果沒有相應的處理機制的話,這些孤兒進程就會一直處于僵死狀態(tài),資源無法釋放,此時系統(tǒng)默認將init進程作為它們的父進程。
二、 進程管理命令
Linux下,監(jiān)控和管理進程的命令有很多,下面我們以ps、top、pstree、lsof四個最常用的指令介紹如果有效的監(jiān)控和管理linux下的各種進程。
(1)利用ps命令監(jiān)控系統(tǒng)進程
ps是linux下最常用的進程監(jiān)控命令,重點講述如何利用ps指令監(jiān)控和管理系統(tǒng)進程。
舉例:
下面是apache進程的輸出信息
其中,UID是用戶的ID標識號,PID是進程的標識號,PPID表示父進程,STIME表示進程的啟動時間,TTY表示進程所屬的終端控制臺,TIME表示進程啟動后累計使用的CPU總時間,CMD表示正在執(zhí)行的命令。并且root的PPID為1,即為Init的ID.
另一種指令方式查看子進程與父進程的對應關系:
其中,%CPU表示進程占用的CPU百分比,%MEM表示進程占用內(nèi)存的百分比,VSZ表示進程虛擬大小,RSS表示進程的實際內(nèi)存(駐留集)大?。▎挝皇琼摚?。
STAT表示進程的狀態(tài),進程的狀態(tài)有很多種:用“R”表示正在運行中的進程,用“S”表示處于休眠狀態(tài)的進程,用“Z”表示僵死進程,用“<”表示優(yōu)先級高的進程,用“N”表示優(yōu)先級較低的進程,用“s”表示父進程,用“+”表示位于后臺的進程。START表示啟動進程的時間。
這個例子將進程之間的關系用樹形結構形象的表示出來,可以很清楚的看到,第一個進程為父進程,而其它進程均為子進程。同時從這個輸出還可以看到每個進程占用CPU、內(nèi)存的百分比,還有進程所處的狀態(tài)等等。
(2)利用pstree監(jiān)控系統(tǒng)進程
pstree命令以樹形結構顯示程序和進程之間的關系,使用格式如下:
代碼如下:
pstree [-acnpu] [
具體選項內(nèi)容可用pstree --help來查看,由于顯示結果的樹形結構太長,就不再貼圖.
pstree清楚的顯示了程序和進程之間的關系,如果不指定進程的PID號,或者不指定用戶名稱,則將以init進程為根進程,顯示系統(tǒng)的所有程序和進程信息,若指定用戶或PID,則將以用戶或PID為根進程,顯示用戶或PID對應的所有程序和進程。
(3)利用top監(jiān)控系統(tǒng)進程
top命令是監(jiān)控系統(tǒng)進程必不可少的工具,與ps命令相比,top命令動態(tài)、實時的顯示進程狀態(tài),而ps只能顯示進程某一時刻的信息,同時,top命令提供了一個交互界面,用戶可以根據(jù)需要,人性化的定制自己的輸出,更清楚的了解進程的實時狀態(tài)。
下面是top的顯示信息
通過動態(tài)信息可以看出一個進程從上次更新到現(xiàn)在占用cpu時間,占用物理內(nèi)存(%MEM),從進程啟動到現(xiàn)在占用cpu總時間(TIME+)等。通過了解這些信息,可以使系統(tǒng)管理員掌握每個進程對系統(tǒng)CPU、物理內(nèi)存的使用狀況。
(4)利用lsof監(jiān)控系統(tǒng)進程與程序
lsof全名list opened files,也就是列舉系統(tǒng)中已經(jīng)被打開的文件,通過lsof,我們就可以根據(jù)文件找到對應的進程信息,也可以根據(jù)進程信息找到進程打開的文件。
lsof指令功能強大,這里介紹“-c,-g,-p,-i”這四個最常用參數(shù)的使用。更詳細的介紹請參看manlsof或者lsof --help。
1) lsoffilename:顯示使用filename文件的進程。
2)lsof -c abc:顯示abc進程現(xiàn)在打開的文件
3)lsof -g gid:顯示指定的進程組打開的文件情況,使用進程組ID即GID
4)lsof -p PID:PID是進程號,通過進程號顯示程序打開的所有文件及相關進程,例如,想知道init進程打開了哪些文件的話,可以執(zhí)行“l(fā)sof-p 1”命令
5)lsof-i :通過監(jiān)聽指定的協(xié)議、端口、主機等信息,顯示符合條件的進程信息。
例如:
顯示系統(tǒng)中tcp協(xié)議對應的25端口進程信息:
代碼如下:
[root@localhost ~]# lsof-i tcp:25
顯示系統(tǒng)中80端口對應的進程信息:
代碼如下:
[root@localhost ~]# lsof-i :80
(5) 計劃任務
計劃任務就是提前設定的一系列命名,來在特定時間里自動完成,比如一些自動備份,自動關系,自動發(fā)郵件,廣播之類
計劃任務有三個比較重要的命令
1)at安排作業(yè)在某一時刻執(zhí)行一次
2)Batch安排作業(yè)在系統(tǒng)負載不重時執(zhí)行一次
3)Cron安排周期性運行的作業(yè)
(6)結束進程
Kill -1重啟進程
kill 進程號 結束進程
kill -9強制結束進程
(7) 設置程序的優(yōu)先級
Niec :指定程序運行優(yōu)先級別
代碼如下:
Nice -n command
Renice:改變一個正在運行的進程的優(yōu)先級別
代碼如下:
Renice -n pid
優(yōu)先級取值范圍為(-20,19)
(8)進程的掛起和恢復:
掛起:Ctrl+Z
終止:Ctrl+C
進程的恢復:
恢復到前臺繼續(xù)運行:fg
恢復到后臺繼續(xù)運行:bg
查看被掛起的進程:jobs
到此,關于“如何理解Linux系統(tǒng)的進程管理機制”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
分享標題:如何理解Linux系統(tǒng)的進程管理機制-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://weahome.cn/article/copchp.html