Linux(六)——程式管理

氺氺發表於2013-05-30

   一 、程式的概念和分類

    1.程式的概念

    Linux是一個多使用者多工的作業系統。

   多使用者是指多個使用者可以在同一時間使用同一個linux系統;

   多工是指在Linux下可以同時執行多個任務,更詳細的說,linux採用了分時管理的方法,所有的任務都放在一個佇列中,作業系統根據每個任務的優先順序為每個任務分配合適的時間片,每個時間片很短,使用者根本感覺不到是多個任務在執行,從而使所有的任務共同分享系統資源,這就是多工的概念。

    上面說的是單CPU多工作業系統的情形,在這種環境下,雖然系統可以執行多個任務,但是在某一個時間點,CPU只能執行一個程式,而在多CPU多工的作業系統下,由於有多個CPU,所以在某個時間點上,可以有多個程式同時執行。

    程式的的基本定義是:在自身的虛擬地址空間執行的一個獨立的程式,從作業系統的角度來看,所有在系統上執行的東西,都可以稱為一個程式。

    需要注意的是:程式和程式的關係可以是多對多關係!

     

    2.程式的分類

    按照程式的功能和執行的程式分類,程式可劃分為兩大類:

      l) 系統程式:可以執行記憶體資源分配和程式切換等管理工作;而且,該程式的執行不受使用者的干預,即使是root使用者也不能干預系統程式的執行。

      2) 使用者程式:通過執行使用者程式、應用程式或核心之外的系統程式而產生的程式,此類程式可以在使用者的控制下執行或關閉。

針對使用者程式,又可以分為互動程式、批處理程式和守護程式三類。

      3) 互動程式:由一個shell終端啟動的程式,在執行過程中,需要與使用者進行互動操作,可以執行於前臺,也可以執行在後臺。

      4) 批處理程式:該程式是一個程式集合,負責按順序啟動其他的程式。

      5) 守護程式:守護程式是一直執行的一種程式,經常在linux系統啟動時啟動,在系統關閉時終止。它們獨立於控制終端並且週期性的執行某種任務或等待處理某些發生的事件。例如httpd程式,一直處於執行狀態,等待使用者的訪問。還有經常用的crond程式,這個程式類似與windows的計劃任務,可以週期性的執行使用者設定的某些任務。

    3.程式的屬性

   (1)程式的幾種狀態


     (2)程式之間的關係

      在linux系統中,程式ID(用PID表示)是區分不同程式的唯一標識,它們的大小是有限制的,最大ID為32768,用UID和GID分別表示啟動這個程式的使用者和使用者組。所有的程式都是PID為1的init程式的後代,核心在系統啟動的最後階段啟動init程式,因而,這個程式是linux下所有程式的父程式,用PPID表示父程式。所以如果init程式被kill,則意味著所有程式就kill,那系統會重啟或關閉

     舉例:ps命令輸出的httpd程式資訊:

 


 

    相對於父程式,就存在子程式,一般每個程式都必須有一個父程式,父程式與子程式之間是管理與被管理的關係,當父程式停止時,子程式也隨之消失,但是子程式關閉,父程式不一定終止。

    如果父程式在子程式退出之前就退出,那麼所有子程式就變成的一個孤兒程式,如果沒有相應的處理機制的話,這些孤兒程式就會一直處於僵死狀態,資源無法釋放,此時系統預設將init程式作為它們的父程式。


    二、 程式管理命令

    Linux下,監控和管理程式的命令有很多,下面我們以pstoppstreelsof四個最常用的指令介紹如果有效的監控和管理linux下的各種程式。

    (1)利用ps命令監控系統程式

   pslinux下最常用的程式監控命令,重點講述如何利用ps指令監控和管理系統程式。

   舉例:

   下面是apache程式的輸出資訊


    其中,UID是使用者的ID標識號,PID是程式的標識號,PPID表示父程式,STIME表示程式的啟動時間,TTY表示程式所屬的終端控制檯,TIME表示程式啟動後累計使用的CPU總時間,CMD表示正在執行的命令。並且rootPPID1,即為InitID.

    

   另一種指令方式檢視子程式與父程式的對應關係:


    其中,%CPU表示程式佔用的CPU百分比,%MEM表示程式佔用記憶體的百分比,VSZ表示程式虛擬大小,RSS表示程式的實際記憶體(駐留集)大小(單位是頁)。

    STAT表示程式的狀態,程式的狀態有很多種:用“R”表示正在執行中的程式,用“S”表示處於休眠狀態的程式,用“Z”表示僵死程式,用“<”表示優先順序高的程式,用“N”表示優先順序較低的程式,用“s”表示父程式,用“+”表示位於後臺的程式。START表示啟動程式的時間。

    這個例子將程式之間的關係用樹形結構形象的表示出來,可以很清楚的看到,第一個程式為父程式,而其它程式均為子程式。同時從這個輸出還可以看到每個程式佔用CPU、記憶體的百分比,還有程式所處的狀態等等。

    (2)利用pstree監控系統程式

      pstree命令以樹形結構顯示程式和程式之間的關係,使用格式如下:

      pstree [-acnpu] [<PID>/<user>]

   具體選項內容可用pstree --help來檢視,由於顯示結果的樹形結構太長,就不再貼圖.      

    pstree清楚的顯示了程式和程式之間的關係,如果不指定程式的PID號,或者不指定使用者名稱稱,則將以init程式為根程式,顯示系統的所有程式和程式資訊,若指定使用者或PID,則將以使用者或PID為根程式,顯示使用者或PID對應的所有程式和程式。

    (3)利用top監控系統程式

     top命令是監控系統程式必不可少的工具,與ps命令相比,top命令動態、實時的顯示程式狀態,而ps只能顯示程式某一時刻的資訊,同時,top命令提供了一個互動介面,使用者可以根據需要,人性化的定製自己的輸出,更清楚的瞭解程式的實時狀態。

    下面是top的顯示資訊


 

     通過動態資訊可以看出一個程式從上次更新到現在佔用cpu時間,佔用實體記憶體(%MEM),從程式啟動到現在佔用cpu總時間(TIME+)等。通過了解這些資訊,可以使系統管理員掌握每個程式對系統CPU、實體記憶體的使用狀況。

  

    (4)利用lsof監控系統程式與程式

     lsof全名list opened files,也就是列舉系統中已經被開啟的檔案,通過lsof,我們就可以根據檔案找到對應的程式資訊,也可以根據程式資訊找到程式開啟的檔案。

     lsof指令功能強大,這裡介紹“-c,-g,-p,-i”這四個最常用引數的使用。更詳細的介紹請參看manlsof或者lsof --help

      1) lsoffilename:顯示使用filename檔案的程式。

      2)lsof -c abc:顯示abc程式現在開啟的檔案

      3)lsof -g gid:顯示指定的程式組開啟的檔案情況,使用程式組IDGID

     4)lsof -p PID:PID是程式號,通過程式號顯示程式開啟的所有檔案及相關程式,例如,想知道init程式開啟了哪些檔案的話,可以執行“lsof-p  1”命令

      5)lsof-i :通過監聽指定的協議、埠、主機等資訊,顯示符合條件的程式資訊。

    例如:

    顯示系統中tcp協議對應的25埠程式資訊:

     [root@localhost ~]# lsof-i tcp:25

    顯示系統中80埠對應的程式資訊:

     [root@localhost ~]# lsof-i :80

     (5) 計劃任務

     計劃任務就是提前設定的一系列命名,來在特定時間裡自動完成,比如一些自動備份,自動關係,自動發郵件,廣播之類

     計劃任務有三個比較重要的命令

      1)at安排作業在某一時刻執行一次

      2)Batch安排作業在系統負載不重時執行一次

      3)Cron安排週期性執行的作業

     (6)結束程式

     Kill -1重啟程式

     kill 程式號   結束程式

     kill -9強制結束程式

     (7) 設定程式的優先順序

     Niec :指定程式執行優先順序別

     Nice -n  command

     Renice:改變一個正在執行的程式的優先順序別

     Renice  -n pid

    優先順序取值範圍為(-20,19)

     (8)程式的掛起和恢復:

     掛起:Ctrl+Z

     終止:Ctrl+C

     程式的恢復:

      恢復到前臺繼續執行:fg

      恢復到後臺繼續執行:bg

     檢視被掛起的程式:jobs

相關文章