Linux進程管理

一、程序與進程      

    1、程序

        程序是為了達到特定的目的,可以被計算機運行并且由命令代碼組成的語句序列。

        程序由指令和數據組成。

        指令:用于調度CPU工作,使CPU可以處理所需要的數據。

    2、進程

        進程是指運行中的程序。

    3、程序的工作模式

        所有對于硬件的操作用戶都無權訪問,如果用戶運行的程序需要訪問硬件時,需要進行系統調用,通過內核來完成對硬件的操作,此時程序將由用戶模式轉入內核模式。比如:我們想在目錄中新建一個文件夾,因為要對磁盤進行寫操作,當使用mkdir命令時,就會進行系統調用由內核來完成此操作后再將結果返回給用戶。                   CPU在其內部的不同區域完成不同的功能:ring0分配給內核(kernel),ring3分配給用戶程序(user program)。

二、Linux的多用戶,多任務環境

    1、內存的分配

        Linux對內存采用分段、分頁的機制。    

        物理內存每4k劃分成一個頁框;頁框為物理內存的最小單位。

        應用程序運行在自己的地址空間內,這個地址空間稱為線性地址空間,所有數據在線性地址空間內部表現為頁面的形式存放,而不是分頁的數據無法交換至swap空間。

        進程訪問數據是從線性地址訪問,內核將線性地址轉換成物理地址,使得進程得以訪問到數據。

        線性地址與物理地址的對應關系存放在一張表中,這引表在MMU(Memory Management Unit)中進行維護。

        內核借助MMU來使得各個進程使用內核時好像是獨立的狀態;MMU完成線性地址到物理地址的轉換。

        內核精心編造了一個數據結構,假如內存如果有4G的話,1G分配給內核使用,3G分配給進程使用;這個數據結構使用得每個進程都認為自己獨占3G內存。

     2、進程調度

        調度就是挑選進程到CPU中運行的過程。

        進程調度采用的O(1)的算法復雜度,即時間恒定的算法。

        CFS:完全公平調度器

    3、進程的分類

        CPU-Bound(CPU密集型):對于CPU占用率高的進程。

        I/O-Bound(I/O密集型):等待I/O時間長的進程

    4、進程優先級

        CPU挑選進程是根據進程的優先級進行的,進程優先級的取值范圍為0-139。

        實時優先級:0-99,數字越大,優先級越高;

        靜態優先級:100-139,數字越小,優先級越高。

        用戶可以通過調整nice值來改變進程的優先級。

            nice值:-20-19 調整靜態優先級

            進程啟動時,默認nice值為0,優先級對應為120。

        動態優先級:由內核維護,動態調整。

        Linux使用搶占式多任務:當時鐘信號到達時,高優先級進程可以搶占CPU。

    5、進程狀態

        運行態:runnnig

        睡眠態:sleeping

            可中斷睡眠:interruptable

            不可中斷睡眠:uninterruptable,等待外部條件滿足之前無法繼續運行。       

        停止態:stopped,不會再被內核調度并運行。

        僵死態:zombie,父進程先于子進程結束了,子進程再也不能被停掉的進程。

    6、子進程  

        進程運行是單線運行的,進程中的指令必須順序執行。             

        子進程:父進程有無法完成的任務時,啟用子進程來執行,此時父進程進入睡眠,子進程執行完成后,返回父進程繼續執行。

        進程創建機制:每一個進程都是由其父進程fork()自身而來。

    7、進程間通信(IPC:Inter Process Communication)

        同一主機:

            singnal:信號。

            shm:共享內存。

            semerphor:旗語。

        不同主機:

            rpc:remote procedure calling,遠程過程調用。

            socket:IP:port,套接字。

    8、CPU虛擬化

        就是將CPU切割為時間片(timeslice)。

        保存現場:將未執行完成進程狀態保存在狀態表中。

        恢復現場:將狀態表中未執行完的進程調出繼續執行。

    9、線程

        線程是比進程更小的可以被單獨調度的單位。

        線程將進程的任務指令拆分,分配到不同的CPU上同時運行。

        不過Linux中的進程都是輕量級進程,已經相當于線程的級別了。

三、Linux進程管理工具

    1、查看進程樹:pstree

1.1.png

    2、顯示進程狀態:ps

        ps命令的選項參數有很多,下面只介紹常用的選項。

        因為開源的原因,ps的也存在眾多的版本,CentOS6的ps命令支持兩種風格:SysV和BSD

            SysV:一般帶“-”

            BSD:不帶“-”

        選項:

            a:與終端相關的進程;

            x:與終端無關的進程;

            u:顯示用戶。

        組合選項:aux

1.png

        上圖中各字段的含義如下:

            USER:進程的發起者;

            PID:進程的PID;

            %CPU:CPU的占用率;

            %MEM:內存的占用率;

            VSZ:Virtual memory size,虛擬內存空間大?。ň€性地址空間大?。?;

            RSS:常駐內存集;不能被交換到swap空間中的所有數據;

            TTY:終端;

            STAT:進程狀態, 包括:

                R:running;

                S:可中斷眨睡眠;

                D:不可中斷睡眠;

                T:Stopped;

                Z:Zombie;

                s:session leader;

                t:前臺進程;

                l:多線程進程;

                N:低優先級進程;

                L:高優先級進程。

            COMMAND:包含在方括號中的進程表示為內核線程。

        組合選項: -ef

              -e:顯示所有進程;

              -f:顯示完整格式的信息。

2.png

        組合選項:-eFH

              -F:顯示額外信息;

              -H:顯示進程的層次結構。

3.png

            -o:自定義要顯示的信息。

4.png

                ni:nice值;

                pri:優先級;

                psr:運行的CPU。

    3、顯示指定進程的進程號:pgrep

        常用選項:

              -u USERNAME:僅顯示由指定用戶啟動的進程;

              -U UID:僅顯示由指定用戶啟動的進程;

              -G GID:僅顯示由指定組啟動的進程;

              -t terminal:僅顯示指定終端相關的進程;

              -l:同時顯示進程號和程序名。

5.png6.png7.png8.png

    4、顯示指定命令所啟動的進程的ID:pidof

9.png

    5、實時監控進程:top

        直接輸入top命令,出現以下界面:

10.png

        可以在上面的界面中直接使用命令來對顯示內容進行控制:

            M:根據內存百分比進行降序排序,對應的列為%MEM;

            P:根據CPU百分比進行降序排序,對應的列為%CPU;

            T:根據累積占用的CPU時間降序排序,對應的列為TIME+;

            l:顯示或不顯示負載信息,即上圖中第一行的內容,如下圖所示:

12.png

            這一行的內容表示:

                10:32:08:當前系統時間;

                up 18:42:服務器連續運行的時長為18小時42分鐘;

                4 users:當前登錄系統的用戶數;

                load average:過去1分鐘、5分鐘、15分鐘的平均負載

            t:顯示或不顯示進程及CPU相關的信息,如下圖所示:

13.png

                上圖為不顯示進程及CPU信息的結果。              

            1:數字,分別顯示各CPU的相關信息;

14.png

            使用數字1可以查看不同的CPU的信息,下面說明各字段具體的含義:                     

                us:user space,用戶運行程序時間百分比;

                sy:system,用于運行內核所占用CPU的百分比;

                ni:nice,用戶進程空間內改變過優先級的進程占用CPU百分比;

                id:idle,空閑CPU百分比;

                wa:wait io,等待IO花費的時間;

                hi:hardware interrupt,硬中斷占用CPU的百分比;

                si:software interrupt,軟中斷占用CPU的百分比;

                st:stolen,偷走的時間百分比。

            m:顯示或不顯示物理內存和交換內存信息,如下圖所示:

1.1.png

            各字段含義如下:

                Mem:物理內存;

                Swap:交換分區; 

                buffers:緩沖區,用于減少進程之間的等待時間;

                cache:CPU與內存之間的高速緩存,用于減少CPU的等時間。                           

            k:終止指定進程;

1.png

2.png3.png           s:修改刷新時間間隔;

1.1.png

            q:退出。

        常用選項:

            -d #:指定刷新時間間隔;   

            -b:以批次的方式顯示top刷新;

            -n #:顯示的批次;

            -p PID:監控指定進程。

1.1.png

            查看指定進程:

1.1.png1.png

    6、顯示虛擬內存統計信息:vmstat

1.1.png

        各字段含義如下:       

            procs:

                r:運行隊列的長度;

                b:被阻塞(等待IO完成)隊列的長度。

            memory:

                swpd:從物理內存交換至swap中的數據量;

                free:空閑物理內存;

                buffer:緩沖,與寫相關,加速寫操作;

                cache:緩存,與讀相關,加速讀操作。

            swap:

                si:swap in,數據進入swap中的數據速率,單位kb/s;

                so:swap out,數據離開swap中的數據速率。

            io:

                bi:block in,從塊設備讀入的數據速率,單位kb/s;

                bo:block out,保存至塊設備的數據速率。

            system:

                in:interrupt,中斷速率;

                cs:context switch,進程切換速率。

            CPU:

                各字段含義與top中所表示的含義相同,此處不再贅述。

        常用選項:

            -s:顯示內存統計數據。

1.1.png

    7、系統資源統計工具:dstat

        命令選項:       

            -c:查看cpu的統計數據

            -d:顯示磁盤的統計數據;

            -D DISK:只顯示指定disk的統計數據;

            -g:顯示page的統計數據;

            -i:顯示中斷的統計數據;

            -m:顯示內存的統計數據;

            -l:顯示系統負載的統計數據;

            -n:顯示網絡接口相關統計數據;

            -N INTERFACE:顯示指定網絡接口的統計數據;

            -s:顯示交換內存統計數據;

            –ipc:顯示ipc消息隊列、信息和共享內存的使用狀況;

            -y:顯示系統狀態數據;

            -cdngy:相當于不帶參數的dstat,也相當于-a

            -t:顯示時間;

        網絡連接狀態統計:

            –tcp:顯示tcp的個數及狀態;

            –udp:顯示udp的個數及狀態;

            –unix:本地通信時unix文件的個數;

            –raw:raw sockets;

            -f:以完整格式顯示所有信息

            -v:類似于vmstat命令;

1.1.png
        命令用法比較簡單,就不做過多的演示了。

四、調整nice值

    只有管理員可以使用小于0的nice值,普通用戶調整nice值時只能增加,即只能把優先級調低。

    1、直接啟動一個進程,并指定其nice值:

1.1.png1.png

    2、調整已運行的進程nice值

1.1.png

1.png

五、進程間通信

    1、顯示常用信號:kill -l 

1.1.png

    2、查看各個信號的作用:man 7 signal

    3、信號的調用方式

        每個信號都可以使用三種方式之一在kill中進行調用:

            1)數字代稱:1,2,9,15;

            2)信號完整名稱:SIGHIP,SIGINT,SIGKILL,SIGTERM;

            3)信號簡稱:HUP,INT,KILL,TERM;

        常用信號的含義:

            1) SIGHUP:讓程序重讀配置文件,而無需重啟程序;

            2) SIGINT:interrupt,相當于ctrl+c,打斷正在運行中的前臺程序;

            9) SIGKILL:強制終止進程;

            15) SIGTERM:正常終止進程,默認選項。

    4、信號調用的格式       

        1、kill [-SIGNAL] PID

1.1.png

        終止所有httpd的進程。

    2、killall [-SIGNAL] COMMAND

1.png

五、Linux作業控制

    前臺作業:通過終端啟動,并在終止之前一直占據著終端;

    后臺作業:作業啟動之后即運行于后臺,釋放前臺;

    交互式模式:手動啟動的非守護進程類的程序,一般都運行于前臺。

    將作業運行于后臺:

        1、將運行中的作業送往后臺

            Ctrl+z:將作業送往后臺,并處于停止狀態。

        2、將尚未啟動的作業直接在后臺運行

            COMMAND &

            這種手動方式控制的作業與終端相關,如果正在運行作業的終端被退出了,作業會被終止;如果想要在終端退出后作業依然在后臺運行,則需要使用下面的命令:

            nohup COMMAND &

    查看當前正在運行的作業:

1.1.png

    三個字段從左至右分別代表:作業號、作業狀態、作業命令。

    作業控制命令:

        fg [[%]jobnum]]:將指定的作業調回前臺;

        bg [[%]jobnum]]:讓送往后臺的作業在后臺繼續運行;

        kill %jobnum:終止指定的作業。

原創文章,作者:petmaster,如若轉載,請注明出處:http://www.www58058.com/2606

(0)
petmasterpetmaster
上一篇 2015-05-14
下一篇 2015-05-18

相關推薦

  • 第二天作業

    一、Linux 文件管理類命令   cd、pwd、mkdir、rmdir、ls、cp、rm、mv、cat、tac、more、less、head、tail、touch     1、目錄類相關命令     cd:change directory 切換目錄     pwd:print …

    Linux干貨 2016-08-22
  • 第二周練習與作業

    第二周作業 1、Linux上的文件管理類命令有哪些,其常用的使用方法及其相關示例演示          文件管理類命令:cp,mv,rm cp: 源文件;目標文件          [root@loc…

    Linux干貨 2017-08-09
  • sed大法好

    sed sed概念 (1)基本概念:sed是流編輯器(stream editor),A stream editor is used to perform basic text transformations on an input stream (a file or input from a pipeline).作用就是對輸入的流(文件或者從一個管道輸入的流…

    Linux干貨 2016-12-02
  • Nginx介紹及使用

       Nginx(engine x)是一個高性能的HTTP和反向代理服務器, 也是一個IMAP/POP3/SMTP服務器. Nginx是由IgorSysoev為俄羅斯訪問量第二的Rambler.ru站點開發的, 第一個公開版本在2004年發布. 因為它的穩定性, 豐富的功能集, 示例配置文件和低系統資源的消耗而聞名. Nginx是一款輕量…

    Linux干貨 2016-11-11
  • 安裝RPM包 rpm與yum工具的使用

    1.認識yum與rpm工具.                 在windows下安裝一個軟件很輕松,只要雙擊.exe的文件,安裝提示連續 “下一步” 即可,然而linux系統下安裝一個軟件似乎并不那么輕松了,因為我們不是在圖形界面下。所以你要學會如何在linux下安裝一…

    Linux干貨 2016-08-26
  • 內核編譯

    單內核體系設計、但充分借鑒了微內核設計體系的優點,為內核引入模塊化機制。 內核組成部分核心,一般為bzImage,通常在/boot目錄下,名稱為vmlinuz-VERSION-RELEASE;: kernel: 內核 kernel object: 內核對象,一般放置于/lib/modules/VERSION-RELEASE/ [ ]: N [M]: M [*…

    Linux干貨 2015-11-06

評論列表(1條)

  • stanley
    stanley 2015-05-18 17:34

    字體,內容,樣式,主次,樣樣具全,不得不贊

欧美性久久久久