Linux進程管理

內核的功能:

    進程管理 文件系統 網絡功能 內存管理 驅動程序 安全功能等

    rocess:運行中的程序的一個副本,是被載入內存的一個指令集合

     進程ID(Process ID,PID)號碼被用來標記各個進程 UID,GID,和SElinux語境決定對文件系統的存取和訪問權限,通常從執行進程的用戶來繼承,存在生命週期。

    task struct:Linux內核存儲進程信息的數據結構格式

task list:多個任務的task Struct組成的鏈表

        進程創建:

             init:第一個進程

父子進程

        進程:

            都由其父進程創建,COW

             fork(),clone()


        進程優先級:

            系統優先級:數字越小,優先級越高

            0-139(centos4,5)

            各有140個運行隊列和過期隊列

            0-98,99(centos6)

            實時優先級:99-0:值最大優先級最高

            Nice值:-20,19對應系統優先級100-139或99

            big O:時間複雜度,有時和規模的關係

            O(1),O(logn),O(n)線性,O(n^2)拋物線,O(2^n)

        進程內存:

            Page Frame:頁框,用存儲頁面數據,存儲Page 4K

            LRU:Least Recently Used 近期最少使用算法,釋放內存物理地址空間和線性地址空間

            MMU:Memory Management unit 負責轉換線性和物理地址

            IPC:Inter Process Communication

        同一主機上:

            signal

            shm:shared memory

            semophore:信號量,一種計數器

        不同主機上:

            rpc:remote procedure call

socket:IP號和端口號

    

        Linux內核:搶佔式多任務

        進程類型:

            守護進程:daemon,在系統引導過程中啓動的進程,和終端無關進程

            前臺進程:跟終端相關,通過終端啓動的進程

            注意:兩者可相互轉化

        進程狀態:

            運行態:running

            就緒態:ready

            停止態:stopped 暫停於內存中,但不會被調度,除非手動啓動

            將死態:zombie  結束進程,父進程結束前,子進程不關閉

        睡眠態:

            可中斷:interruptable

    不可中斷:uninterruptable

        進程的分類:

            CPU-Bound:CPU密集型,非交互式

             IO-Bound: IO密集型,交互

            Linux系統狀態的查看及管理工具:

            pstree,ps,pidof,pgrep,top,htop,glance,pmap,vmstat,dstat,kill,pkill,job,bg,fg,nohup

         pstree命令:

            pstree - display a tree of processes

            ps命令:process state

            ps -report a snapshot of the current processes

            Linux系統各進程的相關信息均保存在/proc/PID目錄下的各文件中

       支持三種選項:

            unix選項  如-A -e

            BSD選項   如a

            GUN選項   如--help

            默認顯示當前終端中的進程:

            a 選項包括所有終端中的進程

            x選項包括不鏈接終端的進程

            u選項顯示進程所有者的信息

            f選項顯示進程的父進程

            o屬性....選項顯示定製的信息pid  comm %cpu %mem state tty euser ruser

        VSZ:virtual Memory size 虛擬內存集 線性內存

        RSS:ReSident Size  常駐內存集

        STAT: 進程狀態

            R:running

            S:interruptable sleeping

            D:uninterruptable sleeping

            T:stopped

            Z:zombie

            +:前臺進程

            I:多線程進程

            N:低優先級進程

            <:高優先級進程

            s:session leader 會話(子進程)發起者

        常用組和:-ef

            -e:顯示所有進程

            -f:顯示完整格式程序信息

        常用組和:-eFH

            -F:顯示更完整格式的進程信息

            -H:以進程層級格式顯示進程相關信息

        常用組和:自定義

            -eo:顯示所有進程,     定製屬性 例如:[root@nzg7 ~]# ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm

            -axo: 所有終端所有進程,定製屬性 例如:[root@nzg7 ~]# ps -axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm

            ni:nice值

            pri:priority,優先級

              psr:processor,cpu編號

          rtprio:實時優先級

       最靈活:ps 選項 | 其他命令

         按預定義的模式:pgrep

            pgrep [options] pattern

            -u uid:effective user,生效者

            -U uid:real user  真正的發起運行命令者

            -t terminal:與指定終端相關的進程

            -l 顯示進程名

            -a 顯示完整格式的進程名

            -P pid:顯示指定進程的子進程

        按確切的程序名稱:/sbin/pidof

        $pidof bash


        uptime

              顯示當前時間,系統已啓動的時間,當前上線人數,系統平均負載(1、5、10分鐘的平均負載,一般不會超過1)

        系統平均負載:

            指在特定時間間隔內運行隊列中的平均進程數

            如果每個CPU內核的當前活動進程數不大於3的話,那麼系統的性能良好,如果每個CPU內核的任務大於5,那麼這臺機器的性能有嚴重問題

            如果linux主機是1個雙核cpu的話,當load Average 爲6的時候說明機器已經充分使用了

    


     top:內置命令

 排序:

            p:已佔據的cpu百分比,%cpu

            M:佔據內存百分比,%MEM

            T:累積佔據CPU時長,TIME+

        首部信息顯示:

             uptime信息:   |命令

            tasks及cpu信息:+命令

                cpu分別顯示:   1(數字)

                Memory信息:   m命令

                退出命令:   q

                修改刷新時間間隔:s

                終止指定進程:k

                保存文件:W

          

        欄位信息簡介

              us:用戶空間

              sy:內核空間

              ni:調整nice時間

              id:空閒

              wa:等待IO時間

              hi:硬中斷

              si:軟中斷(模式切換)

              s+:虛擬機偷走的時間

      PID (Process Id):任務的進程ID

            PPID (Parent Process Pid):父任務的進程ID

            RUSER (Real User Name):任務的所有者真實名稱

            UID (User Id):任務所有者ID

            USER (User Name):任務所有者名稱

            GROUP (Group Name):任務所有者羣組名

            TTY (Controlling Tty):終端

            PR (Priority):優先級

            %CPU (CPU usage):CPU使用率

            %MEM (Memory usage (RES)):內存使用率

            S (Process Status):進程狀態

            TIME+ (CPU Time, hundredths):CPU時間,精確到秒

        選項:

             -d #:指定刷新時間間隔,默認3秒

             -n #:以批次方式

            -b:以批次方式

             -u User:僅顯示指定用戶的進程

            -sCOLUME:以指定字段進行排序

                  #htop需要自己下載

        子命令:

            s:跟蹤選定進程的系統調用

            l: 顯示選定進程打開的文件列表;

            a:將選定的進程綁定至某指定CPU核心;

            t: 顯示進程樹

            vmstat命令:虛擬內存信息

            vmstat [options] [delay [count]]

            vmstat 2 5

        procs:

            r:等待運行的進程的個數,和核心數有關

            b:處於不可中斷睡眠態的進程個數(被阻塞的隊列的長度)

            memory: 

            swpd:   交換內存的使用總量

            free:  空閒物理內存總量

            buffer:用於buffer的內存總量

            cache: 用於cache的內存總量

        swap:

            si:從磁盤交換進內存的數據速率(kb/s)

            so:從內存交換至磁盤的數據速率(kb/s)

            io:

            bi:從塊設備讀入數據到系統的速率(kb/s)

            bo: 保存數據至塊設備的速率

            system:

            in: interrupts, 中斷速率,包括時鐘

            cs: context switch, 進程切換速率

        cpu:

            us: Time spent running non-kernel code

            sy: Time spent running kernel code

            id: Time spent idle. Linux 2.5.41前,包括IO-wait time.

            wa: Time spent waiting for IO. 2.5.41前,包括in idle.

            st: Time stolen from a virtual machine. 2.6.11前, unknown.

        選項:

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

        dstat命令:

             dstat [-afv] [options..] [delay[count]]

             -c:顯示cpu相關信息

             -d:顯示disk的相關信息

             -g;顯示page相關統計數據

             -m:顯示Memory相關統計數據

             -n:顯示network相關統計數據

             -p:顯示process相關統計數據

             -r:顯示io請求相關的統計數據

             -s:顯示swapped相關的統計數據

             --tcp tcp鏈接數

             --udpudp鏈接數

             --socket 查看詳細監控信息

             --top-cpu:顯示最佔用cpu的進程

             --top-io:顯示最佔用io的進程

             --top-mem:顯示最佔用內存的進程

             --top-latency:顯示延遲最大的進程

    進程管理工具

        kill:

             向進程發送控制信號 ,以實現對進程管理

             顯示當前系統可用信號:kill -1

             常用信號:man 7 signal

             1)SIGHUP:無須關閉進程而讓其重讀配置文件

             2)SIGINT:中止正在運行的進程;相當於ctrl+c

             9)SIGKILL:殺死正在運行的進程

             15)SIGTERM:終止正在運行的進程

             18)SIGCONT:繼續運行

             19)SIGSTOP:後臺休眠

             指定信號的方法:

             (1)信號的數字標識:1,2,9

             (2)信號的完整名稱:SIGHUP

             (3)信號的簡寫名稱:HUP

             按PID: kill [-SIGNAL] pid ...

             按名稱:killall [-SIGNAL] comm ...

             按模式:pkill [options] pattern

             -SIGNAL

             -u uid:effective user,生效者

             -Uuid:real user,真正發起運行命令着

             -t terminal:與指定終端相關的進程

             -l:顯示進程名

             -a:顯示完整格式的進程名

             -p pid:顯示父進程爲此處指定的進程的進程列表

        linux作業控制:

             前臺作業:通過終端啓動,且啓動後一直佔據終端

             後臺作業:可通過終端啓動,但啓動後即轉入後臺運行(釋放終端)

       如何讓作業運行在後臺?

                 運行中的作業:ctrl+z

        尚未啓動的作業:COMMand &

                 後臺作業雖然被送往後臺運行,但其依然與終端相關,退出終端,將關閉後臺作業,如果希望送往後臺後,剝離與終端的關係

             #nohup COMMAND& #screen:COMMAND

          查看所有作業;

                jobs

        作業控制:

             #fg [[%]JOB_NUM]:把指定的後臺作業調回前臺

             #bg [[%]JOB_NUM]: 讓送往後臺的作業在後臺繼續運行

             #kill [%JOB_NUM]: 終止指定的作業

        進程優先級:

             默認優先級:100-139

             進程默認啓動時的nice值爲0,優先級爲120

             只有根用戶才能降低nice值(提高優先級)

        nice命令:

            nice [OPTION] [COMMAND [ARG]...]

        renice命令:

            renice [-n] priority pid...

        查看:

            ps axo pid,comm,ni


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章