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 14:00
下一篇 2015-05-18 17:26

相關推薦

  • nginx的模塊應用

    1.location的定義 (1)當location中午定義時,默認使用server中的相關定義。 (2)當locating中有了相關定義,此時則啟用location中的定義的內容。 nginx -t檢查配置文件是否有語法錯誤 nginx -s reload重載nginx (3)即使server中的root中的目錄下有了/admin的目錄,但是同時又在loc…

    Linux干貨 2016-10-30
  • 馬哥教育網絡班21期+第3周課程練習

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 # who | cut -d' ' -f1 | uniiq 2、取出最后登錄到當前系統的用戶的相關信息。 # id $(who | …

    Linux干貨 2016-07-12
  • N25_第三周作業

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [root@aio ~]# who|cut -d" " -f1|uniq root 2、取出最后登錄到當前系統的用戶的相關信息。 [root@aio ~]# who| …

    Linux干貨 2016-12-19
  • 馬哥教育網絡班21期-第1周課程練習

    1、  描述計算機的組成及其功能。 計算機由硬件系統和軟件系統兩部分組成。硬件系統由運算器,控制器,存儲器,輸入設備和輸出設備組成.     運算器:計算機中進行算術運算和邏輯運算的部件。     控制器:計算機的控制中心。協調和指揮計算機系統的操作。  &n…

    Linux干貨 2016-07-12
  • 馬哥教育網絡21期+第十周練習博客

    馬哥教育網絡21期+第十周練習博客 1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情) CentOS啟動流程:1,加電自檢->Boot Sequence–>加載內核文件 BOOT Sequence中包含了MBR和GRUB     MBR:記錄磁盤扇區,共512字…

    Linux干貨 2016-09-19
  • 馬哥教育網絡21期+第九周練習博客

    馬哥教育網絡21期+第九周練習博客 1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; [root@localhost bin]# cat 1.sh  #!/bin/bash # while&nbsp…

    Linux干貨 2016-09-05

評論列表(1條)

  • stanley
    stanley 2015-05-18 17:34

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

欧美性久久久久