<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Decode360's Blog

    業精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
      397 隨筆 :: 33 文章 :: 29 評論 :: 0 Trackbacks

    Linux 進程管理

    作者: 北南南北
    來自: LinuxSir.Org
    摘要: 本文講述的時進程管理的基本概念和進程管理工具介紹;文中的重點對進程管理工具的分類介紹及應用舉例,包括 ps pgrep 、 top 、 kill pkill 、 killall 、 nice renice 等工具。

    目錄

    1 、程序和進程;

    1.1 進程分類;
    1.2 進程的屬性;
    1.3 父進程和子進程;

    2 、進程管理;

    2.1 ps 監視進程工具;

    2.1.1 ps 參數說明;
    2.1.2 ps 應用舉例;

    2.2 pgrep

    3 、終止進程的工具 kill 、 killall pkill 、 xkill ;

    3.1 kill
    3.2 killall
    3.3 pkill
    3.4 xkill

    4 、 top 監視系統任務的工具;

    4.1 top 命令用法及參數;
    4.2 top 應用舉例;

    5 、進程的優先級: nice renice ;
    6 、關于本文;
    7 、后記;
    8 、參考文檔;
    9 、相關文檔;


    ++++++++++++++++++++++++++++++++++++++
    正文
    ++++++++++++++++++++++++++++++++++++++


    1
    、程序和進程;

    程序是為了完成某種任務而設計的軟件,比如 OpenOffice 是程序。什么是進程呢?進程就是運行中的程序。

    一個運行著的程序,可能有多個進程。 比如 LinuxSir.Org 所用的 WWW 服務器是 apache 服務器,當管理員啟動服務后,可能會有好多人來訪問,也就是說許多用戶來同時請求 httpd 服務, apache 服務器將會創建有多個 httpd 進程來對其進行服務。


    1.1
    進程分類;

    進程一般分為交互進程、批處理進程和守護進程三類。

    值得一提的是守護進程總是活躍的,一般是后臺運行,守護進程一般是由系統在開機時通過腳本自動激活啟動或超級管理用戶 root 來啟動。比如在 Fedora Redhat 中,我們可以定義 httpd 服務器的啟動腳本的運行級別,此文件位于 /etc/init.d 目錄下,文件名是 httpd /etc/init.d/httpd 就是 httpd 服務器的守護程序,當把它的運行級別設置為 3 5 時,當系統啟動時,它會跟著啟動。

    [root@localhost ~]# chkconfig? --level 35? httpd on

    由于守護進程是一直運行著的,所以它所處的狀態是等待請求處理任務。比如,我們是不是訪問 LinuxSir.Org , LinuxSir.Org httpd 服務器都在運行,等待著用戶來訪問,也就是等待著任務處理。


    1.2
    進程的屬性;

    進程 ID PID :是唯一的數值,用來區分進程;
    父進程和父進程的 ID PPID ;
    啟動進程的用戶 ID UID )和所歸屬的組( GID );
    進程狀態:狀態分為運行 R 、休眠 S 、僵尸 Z ;
    進程執行的優先級;
    進程所連接的終端名;
    進程資源占用:比如占用資源大小(內存、 CPU 占用量);


    1.3
    父進程和子進程;

    他們的關系是管理和被管理的關系,當父進程終止時,子進程也隨之而終止。但子進程終止,父進程并不一定終止。比如 httpd 服務器運行時,我們可以殺掉其子進程,父進程并不會因為子進程的終止而終止。

    在進程管理中,當我們發現占用資源過多,或無法控制的進程時,應該殺死它,以保護系統的穩定安全運行;


    2
    、進程管理;

    對于 Linux 進程的管理,是通過進程管理工具實現的,比如 ps 、 kill 、 pgrep 等工具;


    2.1 ps
    監視進程工具;

    ps 為我們提供了進程的一次性的查看,它所提供的查看結果并不動態連續的;如果想對進程時間監控,應該用 top 工具;


    2.1.1 ps
    的參數說明;

    ps 提供了很多的選項參數,常用的有以下幾個;

    l? 長格式輸出;

    u? 按用戶名和啟動時間的順序來顯示進程;

    j? 用任務格式來顯示進程;

    f? 用樹形格式來顯示進程;

    a? 顯示所有用戶的所有進程(包括其它用戶);

    x? 顯示無控制終端的進程;

    r? 顯示運行中的進程;

    ww 避免詳細參數被截斷;

    我們常用的選項是組合是 aux lax ,還有參數 f 的應用;

    ps aux lax 輸出的解釋;

    USER????? 進程的屬主;

    PID?????? 進程的ID

    PPID? ??? 父進程;

    %CPU????? 進程占用的CPU百分比;

    %MEM????? 占用內存的百分比;

    NI??????? 進程的NICE值,數值大,表示較少占用CPU時間;

    VSZ ????? 進程虛擬大??;

    RSS? ???? 駐留中頁的數量;

    TTY? ???? 終端ID

    STAT ???? 進程狀態

    ??? D??? Uninterruptible sleep (usually IO)

    ??? R??? 正在運行可中在隊列中可過行的;

    ??? S??? 處于休眠狀態;

    ??? T??? 停止或被追蹤;

    ??? W??? 進入內存交換(從內核2.6開始無效);

    ??? X??? 死掉的進程(從來沒見過);

    ??? Z??? 僵尸進程;

    ??? <??? 優先級高的進程

    ??? N??? 優先級較低的進程

    ??? L??? 有些頁被鎖進內存;

    ??? s??? 進程的領導者(在它之下有子進程);

    ??? l??? is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)

    ??? +??? 位于后臺的進程組; ?

    WCHAN???? 正在等待的進程資源;

    START ??? 啟動進程的時間;

    TIME????? 進程消耗CPU的時間;

    COMMAND ? 命令的名稱和參數;


    2.1.2 ps
    應用舉例;

    實例一: ps aux 最常用

    [root@localhost ~]# ps -aux |more

    可以用 | 管道和 more 連接起來分頁查看;

    [root@localhost ~]# ps -aux? > ps001.txt
    [root@localhost ~]# more ps001.txt

    這里是把所有進程顯示出來,并輸出到 ps001.txt 文件,然后再通過 more 來分頁查看;

    實例二:和 grep 結合,提取指定程序的進程;

    [root@localhost ~]# ps aux |grep httpd
    root????? 4187? 0.0? 1.3? 24236 10272 ???????? Ss?? 11:55?? 0:00 /usr/sbin/httpd
    apache??? 4189? 0.0? 0.6? 24368? 4940 ???????? S??? 11:55?? 0:00 /usr/sbin/httpd
    apache??? 4190? 0.0? 0.6? 24368? 4932 ???????? S??? 11:55?? 0:00 /usr/sbin/httpd
    apache??? 4191? 0.0? 0.6? 24368? 4932 ???????? S??? 11:55?? 0:00 /usr/sbin/httpd
    apache??? 4192? 0.0? 0.6? 24368? 4932 ???????? S??? 11:55?? 0:00 /usr/sbin/httpd
    apache??? 4193? 0.0? 0.6? 24368? 4932 ???????? S??? 11:55?? 0:00 /usr/sbin/httpd
    apache??? 4194? 0.0? 0.6? 24368? 4932 ???????? S??? 11:55?? 0:00 /usr/sbin/httpd
    apache??? 4195? 0.0? 0.6? 24368? 4932 ???????? S??? 11:55?? 0:00 /usr/sbin/httpd
    apache??? 4196? 0.0? 0.6? 24368? 4932 ???????? S??? 11:55?? 0:00 /usr/sbin/httpd
    root????? 4480? 0.0? 0.0?? 5160?? 708 pts/3??? R+?? 12:20?? 0:00 grep httpd

    實例二:父進和子進程的關系友好判斷的例子

    [root@localhost ~]# ps auxf? |grep httpd
    root????? 4484? 0.0? 0.0?? 5160?? 704 pts/3??? S+?? 12:21?? 0:00????????????? \_ grep httpd
    root????? 4187? 0.0? 1.3? 24236 10272 ???????? Ss?? 11:55?? 0:00 /usr/sbin/httpd
    apache??? 4189? 0.0? 0.6? 24368? 4940 ???????? S??? 11:55?? 0:00? \_ /usr/sbin/httpd
    apache??? 4190? 0.0? 0.6? 24368? 4932 ???????? S??? 11:55?? 0:00? \_ /usr/sbin/httpd
    apache??? 4191? 0.0? 0.6? 24368? 4932 ???????? S??? 11:55?? 0:00? \_ /usr/sbin/httpd
    apache??? 4192? 0.0? 0.6? 24368? 4932 ???????? S??? 11:55?? 0:00? \_ /usr/sbin/httpd
    apache??? 4193? 0.0? 0.6? 24368? 4932 ???????? S??? 11:55?? 0:00? \_ /usr/sbin/httpd
    apache??? 4194? 0.0? 0.6? 24368? 4932 ???????? S??? 11:55?? 0:00? \_ /usr/sbin/httpd
    apache??? 4195? 0.0? 0.6? 24368? 4932 ???????? S??? 11:55?? 0:00? \_ /usr/sbin/httpd
    apache??? 4196? 0.0? 0.6? 24368? 4932 ???????? S??? 11:55?? 0:00? \_ /usr/sbin/httpd

    這里用到了 f 參數;父與子關系一目了然;


    2.2 pgrep

    pgrep 是通過程序的名字來查詢進程的工具,一般是用來判斷程序是否正在運行。在服務器的配置和管理中,這個工具常被應用,簡單明了;

    用法:

    #ps 參數選項?? 程序名

    常用參數

    -l? 列出程序名和進程ID;
    -o? 進程起始的ID;
    -n? 進程終止的ID;

    舉例:

    [root@localhost ~]# pgrep -lo httpd
    4557 httpd

    [root@localhost ~]# pgrep -ln httpd
    4566 httpd

    [root@localhost ~]# pgrep -l httpd
    4557 httpd
    4560 httpd
    4561 httpd
    4562 httpd
    4563 httpd
    4564 httpd
    4565 httpd
    4566 httpd

    [root@localhost ~]# pgrep httpd
    4557
    4560
    4561
    4562
    4563
    4564
    4565
    4566


    3
    、終止進程的工具 kill killall 、 pkill 、 xkill ;

    終止一個進程或終止一個正在運行的程序,一般是通過 kill killall 、 pkill 、 xkill 等進行。比如一個程序已經死掉,但又不能退出,這時就應該考慮應用這些工具。

    另外應用的場合就是在服務器管理中,在不涉及數據庫服務器程序的父進程的停止運行,也可以用這些工具來終止。為什么數據庫服務器的父進程不能用這些工具殺死呢?原因很簡單,這些工具在強行終止數據庫服務器時,會讓數據庫產生更多的文件碎片,當碎片達到一定程度的時候,數據庫就有崩潰的危險。比如 mysql 服務器最好是按其正常的程序關閉,而不是用 pkill mysqld killall mysqld 這樣危險的動作;當然對于占用資源過多的數據庫子進程,我們應該用 kill 來殺掉。


    3.1 kill

    kill 的應用是和 ps pgrep 命令結合在一起使用的;

    kill 的用法:

    kill [信號代碼]?? 進程ID

    注: 信號代碼可以省略;我們常用的信號代碼是 -9 ,表示強制終止;

    舉例:

    [root@localhost ~]# ps? auxf? |grep?? httpd
    root????? 4939? 0.0? 0.0?? 5160?? 708 pts/3??? S+?? 13:10?? 0:00????????????? \_ grep httpd
    root????? 4830? 0.1? 1.3? 24232 10272 ???????? Ss?? 13:02?? 0:00 /usr/sbin/httpd
    apache??? 4833? 0.0? 0.6? 24364? 4932 ???????? S??? 13:02?? 0:00? \_ /usr/sbin/httpd
    apache??? 4834? 0.0? 0.6? 24364? 4928 ???????? S??? 13:02?? 0:00? \_ /usr/sbin/httpd
    apache??? 4835? 0.0? 0.6? 24364? 4928 ???????? S??? 13:02?? 0:00? \_ /usr/sbin/httpd
    apache??? 4836? 0.0? 0.6? 24364? 4928 ???????? S??? 13:02?? 0:00? \_ /usr/sbin/httpd
    apache??? 4837? 0.0? 0.6? 24364? 4928 ???????? S??? 13:02?? 0:00? \_ /usr/sbin/httpd
    apache??? 4838? 0.0? 0.6? 24364? 4928 ???????? S??? 13:02?? 0:00? \_ /usr/sbin/httpd
    apache??? 4839? 0.0? 0.6? 24364? 4928 ???????? S??? 13:02?? 0:00? \_ /usr/sbin/httpd
    apache??? 4840? 0.0? 0.6? 24364? 4928 ???????? S??? 13:02?? 0:00? \_ /usr/sbin/httpd

    我們查看 httpd 服務器的進程;您也可以用 pgrep -l httpd 來查看;

    我們看上面例子中的第二列,就是進程 PID 的列,其中 4830 httpd 服務器的父進程,從 4833 4840 的進程都是它 4830 的子進程;如果我們殺掉父進程 4830 的話,其下的子進程也會跟著死掉;

    [root@localhost ~]# kill 4840? 注:殺掉4840這個進程;

    [root@localhost ~]# ps -auxf? |grep? httpd? 注:查看一下會有什么結果?是不是httpd服務器仍在運行?
    [root@localhost ~]# kill 4830?? 注:殺掉httpd的父進程;
    [root@localhost ~]# ps -aux |grep httpd? 注:查看httpd的其它子進程是否存在,httpd服務器是否仍在運行?

    對于僵尸進程,可以用 kill -9 來強制終止退出;

    比如一個程序已經徹底死掉,如果 kill 不加信號強度是沒有辦法退出,最好的辦法就是加信號強度 -9 ,后面要接殺父進程;比如;

    [root@localhost ~]# ps aux |grep gaim
    beinan??? 5031? 9.0? 2.3 104996 17484 ???????? S??? 13:23?? 0:01 gaim
    root????? 5036? 0.0? 0.0?? 5160?? 724 pts/3??? S+?? 13:24?? 0:00 grep gaim



    [root@localhost ~]# pgrep -l gaim
    5031 gaim
    [root@localhost ~]# kill -9 5031


    3.2 killall

    killall 通過程序的名字,直接殺死所有進程,咱們簡單說一下就行了。


    用法: killall 正在運行的程序名

    killall 也和 ps pgrep 結合使用,比較方便;通過 ps pgrep 來查看哪些程序在運行;

    舉例:

    [root@localhost beinan]# pgrep -l gaim
    2979 gaim

    [root@localhost beinan]# killall gaim


    3.3 pkill

    pkill killall 應用方法差不多,也是直接殺死運行中的程序;如果您想殺掉單個進程,請用 kill 來殺掉。

    應用方法:

    #pkill? 正在運行的程序名

    舉例:

    [root@localhost beinan]# pgrep -l gaim
    2979 gaim

    [root@localhost beinan]# pkill gaim


    3.4 xkill

    xkill 是在桌面用的殺死圖形界面的程序。比如當 firefox 出現崩潰不能退出時,點鼠標就能殺死 firefox 。當 xkill 運行時出來和個人腦骨的圖標,哪個圖形程序崩潰一點就 OK 了。如果您想終止 xkill ,就按右鍵取消;

    xkill 調用方法:

    [root@localhost ~]# xkill


    4
    top 監視系統任務的工具;

    ps 相比, top 是動態監視系統任務的工具, top 輸出的結果是連續的;


    4.1 top
    命令用法及參數;

    top 調用方法:

    top 選擇參數

    參數:

    -b? 以批量模式運行,但不能接受命令行輸入;
    -c 顯示命令行,而不僅僅是命令名;
    -d N? 顯示兩次刷新時間的間隔,比如 -d 5,表示兩次刷新間隔為5秒;
    -i 禁止顯示空閑進程或僵尸進程;
    -n NUM? 顯示更新次數,然后退出。比如 -n 5,表示top更新5次數據就退出;
    -p PID 僅監視指定進程的IDPID是一個數值;
    -q? 不經任何延時就刷新;
    -s? 安全模式運行,禁用一些效互指令;
    -S 累積模式,輸出每個進程的總的CPU時間,包括已死的子進程;


    交互式命令鍵位:

    space? 立即更新;
    c 切換到命令名顯示,或顯示整個命令(包括參數);
    f,F 增加顯示字段,或刪除顯示字段;
    h,? 顯示有關安全模式及累積模式的幫助信息;
    k 提示輸入要殺死的進程ID,目的是用來殺死該進程(默人信號為15
    i 禁止空閑進程和僵尸進程;
    l 切換到顯法負載平均值和正常運行的時間等信息;
    m 切換到內存信息,并以內存占用大小排序;
    n? 提示顯示的進程數,比如輸入3,就在整屏上顯示3個進程;
    o,O 改變顯示字段的順序;
    r renice 應用到一個進程,提示輸入PIDrenice的值;
    s 改變兩次刷新時間間隔,以秒為單位;
    t 切換到顯示進程和CPU狀態的信息;
    A 按進程生命大小進行排序,最新進程顯示在最前;
    M 按內存占用大小排序,由大到??;
    N 以進程ID大小排序,由大到小;
    P CPU占用情況排序,由大到小
    S 切換到累積時間模式;
    T? 按時間/累積時間對任務排序;
    W 把當前的配置寫到~/.toprc中;


    4.2 top
    應用舉例;

    [root@localhost ~]# top

    然后根據前面所說交互命令按個嘗試一下就明白了,比如按 M ,就按內存占用大小排序;這個例子舉不舉都沒有必要了。呵。。。。。。

    當然您可以把 top 的輸出傳到一個文件中;

    [root@localhost ~]# top > mytop.txt

    然后我們就可以查看 mytop 文件,以慢慢的分析系統進程狀態;


    5
    、進程的優先級: nice renice ;

    Linux 操作系統中,進程之間是竟爭資源(比如 CPU 和內存的占用)關系。這個竟爭優劣是通過一個數值來實現的,也就是謙讓度。高謙讓度表示進程優化級別最低。負值或 0 表示對高優點級,對其它進程不謙讓,也就是擁有優先占用系統資源的權利。謙讓度的值從 20 19 。

    目前硬件技術發展極速,在大多情況下,不必設置進程的優先級,除非在進程失控而瘋狂占用資源的情況下,我們有可能來設置一下優先級,但我個人感覺沒有太大的必要,在迫不得已的情況下,我們可以殺掉失控進程。

    nice 可以在創建進程時,為進程指定謙讓度的值,進程的優先級的值是父進程 SHELL 的優先級的值與我們所指定謙讓度的相加和。所以我們在用 nice 設置程序的優先級時,所指定數值是一個增量,并不是優先級的絕對值;

    nice 的應用舉例:

    [root@localhost ~]# nice -n 5? gaim &?? 注:運行gaim程序,并為它指定謙讓度增量為5;

    所以 nice 的最常用的應用就是:

    nice? -n? 謙讓度的增量值?? 程序

    renice 是通過進程 ID PID )來改變謙讓度,進而達到更改進程的優先級。

    renice? 謙讓度??? PID

    renice 所設置的謙讓度就是進程的絕對值;看下面的例子;

    [root@localhost ~]# ps lax?? |grep gaim

    4???? 0? 4437? 3419? 10? -5 120924 20492 -????? S<?? pts/0????? 0:01 gaim

    0???? 0? 4530? 3419? 10? -5?? 5160?? 708 -????? R<+? pts/0????? 0:00 grep gaim

    ?

    [root@localhost ~]# renice -6? 4437

    4437: old priority -5, new priority -6

    ?

    [root@localhost ~]# ps lax?? |grep gaim

    4???? 0? 4437? 3419? 14? -6 120924 20492 -????? S<?? pts/0????? 0:01 gaim

    0???? 0? 4534? 3419? 11? -5?? 5160?? 708 -????? R<+? pts/0????? 0:00 grep gaim


    6
    、關于本文;

    進程管理還是需要的,雖然在桌面應用上,我們點鼠標就能完成大多的工作,但在服務器管理中,進程管理還是十分重要的。

    有的弟兄會說,為什么您不說說在桌面環境中的圖形管理的進程工具。我感覺沒有太大的必要,如果您會點鼠標就應該能找到有關進程管理的工具。

    還有的弟兄會說: Windows 的進程管理真的很方便,按一下 CTRL ALT DEL 就可以調出來,隨便你怎么殺和砍。我感覺 Windows 的進程管理并不怎么樣,如果有的程序真的需要 CTRL ALT DEL 的話,呵,那肯定會出現系統假死現象。或者程序錯誤之類的提示。弄不好就得重啟,這是事實吧。

    Windows 的進程管理并不優秀,只是一個友好的界面而已,我想我說的沒錯吧;


    7
    、后記;

    近些天一直在為網絡基礎文檔做計劃,當然也隨手寫一寫自己能寫的文檔, 比如本篇就是; 也想把論壇中的一些弟兄優秀的教程整理出來,但后來一想,如果提交到 LinuxSir.Org 首頁上,肯定得做一些修改,如果我來修改倒不如讓作者自己來修改,自己寫的東西自己最明白,對不對???

    在準備網絡文檔計劃的過程中,向 etony 兄請教了一些基本的網絡基礎知識。我對網絡基礎理論基本不懂。聽 tony 兄解說的同時,我也做了筆記。同時也和 tony 兄討論了網絡基礎篇的布局和謀篇的事,這關系到初學者入手的問題,好象是小事,其實事情比較大。如果寫的文檔,新手讀不懂,老鳥又認為沒有價值,我看倒不如不寫。

    ?

    posted on 2009-01-14 19:57 decode360 閱讀(298) 評論(0)  編輯  收藏 所屬分類: 03.Linux
    主站蜘蛛池模板: 亚洲婷婷国产精品电影人久久| 无码国产精品一区二区免费3p| 亚洲精品无播放器在线播放| 亚洲国产成人精品无码一区二区| 亚洲电影国产一区| 亚洲AV日韩精品久久久久久| 人人狠狠综合久久亚洲88| 亚洲乱亚洲乱妇无码麻豆| 一本久久a久久精品亚洲| 国产精品亚洲w码日韩中文| 久久亚洲精品无码观看不卡| 亚洲伊人成无码综合网| 精品亚洲一区二区三区在线观看| 亚洲综合亚洲综合网成人| 久久久久亚洲AV成人网人人网站| 亚洲色无码专区在线观看| 亚洲熟妇无码八AV在线播放| 亚洲av永久无码精品国产精品 | CAOPORN国产精品免费视频| 国产特黄一级一片免费| a在线观看免费视频| 日本在线看片免费| 五月婷婷在线免费观看| 成熟女人特级毛片www免费| 国产免费av一区二区三区| 亚洲高清无码专区视频| 亚洲国产AV无码专区亚洲AV| 亚洲最大成人网色| 97久久国产亚洲精品超碰热| 日韩国产精品亚洲а∨天堂免| 日韩毛片一区视频免费| 成人性做爰aaa片免费看| 3344永久在线观看视频免费首页| 中文字幕无码不卡免费视频| 国产成人涩涩涩视频在线观看免费 | 亚洲成人黄色在线| 亚洲gay片在线gv网站| 狠狠躁狠狠爱免费视频无码 | 中文字幕乱码亚洲精品一区| 国产成人亚洲综合在线| 丝袜足液精子免费视频|