Linux進程及作業管理

process

運行中的程序的一個副本,是被載入內存的一個指令集合
進程ID(Process ID,PID)號碼被用來標記各個進程
UID、GID、和SELinux語境決定對文件系統的存取和訪問權限,
通常從執行進程的用戶來繼承
存在生命周期

task struct:Linux內核存儲進程信息的數據結構格式
task list:多個任務的的task struct組成的鏈表

進程和線程的區別

進程和線程的主要差別在于它們是不同的操作系統資源管理方式。進程有獨立的地址空間,一個進程崩潰后,在保護模式下不會對其它進程產生影響,而線程只是一個進程中的不同執行路徑。線程有自己的堆棧和局部變量,但線程之間沒有單獨的地址空間,一個線程死掉就等于整個進程死掉,所以多進程的程序要比多線程的程序健壯,但在進程切換時,耗費資源較大,效率要差一些。但對于一些要求同時進行并且又要共享某些變量的并發操作,只能用線程,不能用進程。
1) 簡而言之,一個程序至少有一個進程,一個進程至少有一個線程.
2) 線程的劃分尺度小于進程,使得多線程程序的并發性高。
3) 另外,進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序的運行效率。
4) 線程在執行過程中與進程還是有區別的。每個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口。但是線程不能夠獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。
5) 從邏輯角度來看,多線程的意義在于一個應用程序中,有多個執行部分可以同時執行。但操作系統并沒有將多個線程看做多個獨立的應用,來實現進程的調度和管理以及資源分配。這就是進程和線程的重要區別。

進程創建

init:第一個進程
    父子關系
    進程都由其父進程創建
        fork(), clone()

進程優先級

系統優先級:數字越小,優先級越高
    0-139:
        1-99:實時優先級
        100-139:靜態優先級
            數字越小,優先級越高
    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共享內存空間)、semerphor(旗語,類似飛機起飛時的旗幟語言)來完成。
    當兩個進程不在同一臺主機上時:進程間通信可以依靠rpm(remote procedure call遠程過程調用)、socket(套接字)

進程類型

根據進程與系統終端的關系可將進程分為:守護進程和前臺進程
    守護進程:在系統引導過程中啟動的進程,即跟終端無關的進程
    前臺進程:跟終端相關,通過終端啟動的進程,需要注意的是,也可以把前臺啟動的進程送往后臺,以守護模式運行
根據進程占用資源的大小可以將進程分為:CPU密集型和IO密集型
    CPU密集型是對cpu占用率高的進程
    IO密集型是等待I/O時間長的進程

進程狀態

1.Running(運行態):正在運行當中的進程
2.ready:就緒態
3.睡眠態:sleeping
    可中斷睡眠:interruptable
    不可終端睡眠:uninterruptable
4.停止態(Stopped):暫停于內存中,但不會被調度,除非手動啟動
5.僵死態(Zombie):孤魂野鬼,找不到歸宿,父進程不來收尸或父進程已經掛了

管理進程常用命令

pstree命令

H}K9)Q$YKQHFE%@5Q4@@FXI.png

pstree - display a tree of process

ps命令

V{UD79O`(WQVB~%5@U3{$7R.png

report a snapshot of the current processes.
    三種選項風格:
        UNIX:必須帶-
        BSD:必須無-
        GNU:長選項
    啟動進程的方式:
        系統啟動過程中自動啟動:與終端無關的進程
        用戶通過終端啟動:與終端相關的進程
    選項:
        a:所有與終端相關的進程
        x:所有與終端無關的進程
        u:以用戶為中心組織進程狀態信息顯示

        常用組合之一:aux
        每個字段的含義:
            USE:進程的發起者
            PID:進程ID
            %CPU:進程所占用的CPU百分比
            %MEM:進程所占用的內存百分比
            VSZ:進程所占用的虛擬內存空間大小
            RSS:進程所占用的實際內存空間大小
            TTY:此進程運行在哪個終端,pts/n表示遠程終端,tty表示本地終端,?表示系統進程
            STAT:進程的狀態
                R:Running態
                S:Interruptable,可中斷睡眠
                D:Uninterruptable,不可終端睡眠
                T:Stopped,停止態
                Z:Zombie,僵死態
                s:Session leader,會話領導者
                +:前臺進程
                l:多線程進程
                <:高優先級進程
                N:低優先級進程
            START:進程的啟動時間
            TIME:進程實際占用的CPU時間
            COMMAND:觸發此進程的命令程序

        -e:顯示所有進程
        -f:顯示完整格式的進程信息

        常用組合之二:-ef
        每個字段的含義:
            UID:進程的發起者
            PID:進程ID
            PPID:父進程的PID
            C:占用CPU的百分比
            STIME:進程的啟動時間,從什么時候開始啟動的
            TTY:進程在哪個終端運行
            TIME:進程實際花費的CPU時間
            CMD:觸發此進程的命令

        -F:顯示完整格式的進程信息
            C:cpu utilization
            PSR:運行于哪顆CPU
        -H:以層級結構顯示進程的相關信息

        常用組合之三:-eFH

        常用組合之四:exo
            自定義要顯示的字段
                常用的有pid,ni,ppid,command,pri,psr,pcpu,stat,tty,rtprio,euser,ruser...
                    ni:nice值
                    pri:priority,優先級
                    rtprio:real time priority,實時優先級

pgrep命令

Q}1@[LD][SP[X0KD)(9ZROT.png

look up or signal processes based on name and other attributes
pgrep [OPTIONS] pattern
    -U USER:只顯示以指定用戶身份運行的進程
    -t TERMINAL:與指定的終端相關的進程
    -l:顯示進程名
    -a:顯示完整格式的進程名
    -P pid:顯示此進程的子進程

pkill命令

2TKUIC~6GR005(2KTF]92@S.png

可以按照進程名稱殺死進程
    -o:僅向找到的最?。ㄆ鹗迹┻M程號發送信號; 
    -n:僅向找到的最大(結束)進程號發送信號; 
    -P:指定父進程號發送信號; -g:指定進程組; 
    -t:指定開啟進程的終端。

pidof命令

)]4VVU]@%YU}Q[~NX`YX7%M.png

根據指定的命令所啟動的進程ID
    pidof PROGRAM

top命令

`F$@}XS34`}%$F2VN(UPU)S.png

display Linux processes
常用選項:
    -d #:指明延遲時長,單位為秒
    -b:批次顯示
    -n #:顯示的批次數量
每一行代表的含義為:
第一行:
    1.當前的系統時間
    2.系統啟動到現在所經過的時間
    3.當前已經登錄到系統的用戶
    4.系統在1,5,15分鐘的平均負載,值越小表示系統越空閑
第二行:
    顯示的目前進程的總量與個別程序在什么狀態(running,sleeping,stopped,zombie)比較需要注意的是最后的zombie的那個數值,如果不是0就需要查看下是哪個進程處于僵尸狀態
第三行:
    顯示的是CPU的整體負載,如果是多核心的cpu,可以按下數字1來切換不同CPU的負載率
        us:user space用戶空間所占用的CPU百分比
        sy:kernel,內核空間所占用的CPU百分比
        ni:改變過優先級的進程所占用的CPU百分比
        id:空閑CPU百分比
        wa:wait io,等待I/O所花費的時間
        hi:硬件中斷所消耗的百分比
        si:軟件終端所消耗的百分比
        st:被虛擬機偷走的百分比
第四行:表示物理內存空間的使用情況
第五行:表示交換分區的使用情況

子命令:
    P:以占據CPU百分比排序顯示
    M:以占據內存百分比排序顯示
    T:累計占用CPU時間排序顯示
    l:是否顯示負載均衡行
    t:是否顯示進程摘要信息及CPU負載狀態
    1:數字1,平均或單獨顯示CPU的負載狀態
    m:是否顯示內存相關的狀態信息
    q:退出命令
    k:終止指定進程
    s:修改延遲時長

top下面的部分:
    PID:每個進程ID
    USER:進程所屬的使用者
    PR:priority簡寫,進程的優先級,越小優先級越高
    NI:nice的簡寫,與Priority有關,也是越小越早被運行
    VIRT:進程需要的虛擬內存大小,而非使用的虛擬內存大小
    RES:進程當前使用的內存大小,不把包括swap
    SHR:進程與其他進程共享的內存大小
    S:進程的狀態
    %CPU:進程所占用的CPU百分比
    %MEM:進程所占用的內存百分比
    TIME+:CPU使用時間的累加
    COMMAND:觸發此進程的命令

uptime命令

0LHKQI%04R7`6MJ16MC$5~D.png

顯示系統時間、運行時長及平均負載
過去1分鐘、5分鐘和15分鐘的平均負載
等待運行的進程隊列的長度

htop命令

{MV%]BE4P1RN_0@$}L6G1)I.png

top升級版,默認情況下沒有安裝,需要配置EPEL源來進行安裝
支持的選項:
    -d #:延遲時長
    -u USERNAME:僅顯示指定用戶的進程
    -s COLUMN:根據指定的字段進程排序
子命令:
    l:顯示光標所在進程所打開的文件列表
    s:顯示貫標所在進程執行的系統調用
    a:綁定進程到指定的CPU
    #:快速定位光標至PID為#的進程上

vmstat命令

LORR81FNTHRB)_EX]{H0JJF.png

Report virtual memory statistics
vmstat [options] [delay [count]]
    procs:進程相關
        r:等待運行的進程個數;隊列長度
        b:處理不可中斷睡眠狀態的進程的個數
    memory:內存相關
        swpd:交換內存使用量
        free:物理內存空間使用量
        buffer:用于buffer的內存總量
        cache:用于cache的內存總量
    swap:交換分區相關
        si:數據進入swap的速率(kb/s)
        so:數據離開swap的速率(kb/s)
    io:I/O相關
        bi:從設備讀入數據到系統的速率(kb/s)
        bo:保存數據至塊設備的速率(kb/s)
    system:
        in:中斷速率,每秒被中斷的次數
        cs:進程切換的速率
    cpu:
        us:user space用戶運行程序占用CPU的百分比
        sy:system用于運行內核占用CPU的百分比
        id:idle空閑CPU百分比
        wa:wait I/O花費時間
        st:被虛擬機偷走的百分比
常用選項:
    -s:顯示內存的統計數據

pmap

`)[TH(LMW(F{KQ{6S5V0S6F.png

進程對應的內存映射
    pmap [OPTIONS] pid [...]
        -x:顯示詳細格式
        示例:pmap 1
    另一種實現方式:
        cat /proc/PID/maps

系統監控工具

glances

@SGI5{A[LX@ES{WE@QDBKPD.png

A cross-platform curses-based monitoring tool 需要EPEL源
常用選項:
    -b:以Byte為單位顯示網絡數據速率
    -d:關閉磁盤I/O模塊
    -m:關閉mount模塊
    -n:關閉network模塊
    -t #:刷新時間間隔
    -1:每個cpu的相關數據單獨顯示
    -o {HTML|CSV}:輸出格式
    -f /PATH/TO/SOMEDIR:設定輸出文件的位置

C/S模式下運行glances命令:
    服務模式:
        glances -s -B IPADDR

        IPADDR:本機的某地址,用于監聽

    客戶端模式:
        glances -c IPADDR

        IPADDR:是遠程服務器的地址

dstat命令

YPP1J$$5S@FMQ@N9(CNM]%2.png

versatile tool for generating system resource statistics
dstat [-afv] [options..] [delay [count]]
常用選項:
    -c, --cpu:顯示cpu相關信息
        -C#,#,...,total
    -d, --disk:顯示磁盤的相關信息
        -D sda,sdb,...,total
    -g:顯示page相關的速率數據
    -m:Memory的相關統計數據
    -n:Interface的相關統計數據
    -p:顯示process的相關統計數據
    -r:顯示io請求的相關的統計數據
    -s:顯示swapped的相關統計數據

    --tcp:顯示tcp套接字的相關數據
    --udp:顯示udp套接字的相關數據
    --raw:顯示raw套接字的相關數據
    --socket:
    --ipc:顯示進程間通信相關的速率數據

    --top-cpu:顯示最占用CPU的進程
    --top-io:最占用io的進程
    --top-mem:最占用內存的進程
    --top-lantency:延遲最大的進程

管理進程

kill命令

terminate a process
用于向進程發送信號,以實現對進程的管理

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

    每個信號的表示方法有三種:
        1)信號的數字標識
        2)信號完整名稱
        3)信號的簡寫名稱

向進程發信號:
    kill [-s signal|-p] [-q sigval] [-a] [--] pid...
    常用信號:
        1)SIGHUP:無需關閉進程讓其重讀配置文件
        2)SIGINT:終止正在運行的進程,相當于Ctrl+c
        9)SIGKILL:強行殺死所指定的進程
        15)SIGTERM:終止一個進程,默認kill命令不跟選項則使用此選項
        18)SIGOUT:繼續運行進程
        19)SIGSTOP:暫停進程,把進程放置于后臺,相當于Ctrl+z

killall

終止一個進程
killall [-SIGNAL] program

作業管理

jobs命令

{S`$I7S)RAYDDAX$UUFX{3L.png

查看當前系統作業
    -l:顯示進程ID
前臺作業(foregroud):通過終端啟動,且啟動后會一直占據終端
后臺作業(backgroud):可以通過終端啟動,但啟動后即轉入后臺運行(釋放終端)

如何讓作業運行于后臺?
    (1)運行中的作業
        Ctrl+z
        注意:送往后臺后,作業會轉為停止態
    (2)尚未啟動的作業
        # COMMAND &
        注意:此類作業雖然被送往后臺,但其依然與終端相關;如果終端終止,與終端相關的進程將被終止;
            如果希望把送往后臺的作業剝離與終端的關系
                # nohup COMMAND &

可實現作業控制的常用命令:
    fg [[%]JOB_NUM]:把后臺作業調回前臺
    bg [[%]JOB_NUM]:讓送往后臺的作業在后臺繼續運行
    kill %JOB_NUM:終止指定的作業

調整進程優先級

可通過nice值調整的優先級范圍:100-139
    分別對應于:-20, 19

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

nice命令:
    以指定的nice值啟動并運行命令
        nice [OPTION] [COMMAND [ARGU]...]
            選項:
                -n NICE

        注意:只有管理員才可調低nice值

renice命令:
    renice [-n] NICE PID...

查看Nice值和優先級:
    ps axo pid,ni,priority,command | grep COMMAND

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

(0)
zhai796898zhai796898
上一篇 2016-09-10
下一篇 2016-09-11

相關推薦

  • 計算機組成原理

                                 計算機組成原理 Linux 操作系統是UNIX 操作系統的一種克隆系統。它誕生于1991 年的10 月5 日(這是第一次正式向外公布的時間)。以后借助于…

    Linux干貨 2016-10-27
  • VMware vSphere所需要開放的端口

        80 vCenter Server需要端口80用于直接HTTP連接。端口80會將請求重定向到HTTPS端口443。如果意外使用了http://server而不是https://server,此端口將非常有用。     389 此端口在vCenter Server的本地和所…

    Linux干貨 2016-07-07
  • History,Help——Linux基本命令(6)

    1.     history   當你在玩Linux的時候,如果你經常使用命令行來控制你的Linux系統,那么有效地使用命令歷史機制將會使效率獲得極大提升。 history是shell的內置命令,其內容在系統默認的shell的man手冊中。 一些用法: history[-c] [-d offset] [n] …

    2017-07-15
  • python裝飾器詳解

    python之裝飾器詳解 一、裝飾器定義 定義一個函數,可以接受一個函數作為參數,對該函數進行一些包裝,不改變函數的本身。 二、裝飾器四部曲(分解) 1、函數可賦值給變量。若賦值給變量的是調用后的函數,變量的值就是return的返回值。 切記:函數賦值給變量,只看return的值。分清楚函數是處于調用狀態還是未被調用狀態。若函數沒有寫return,默認ret…

    2017-02-08
  • 7月19號:計算機基礎+在VMware12中安裝CentOS6.8

        16號從正下暴雨的武漢來到帝都參加馬哥培訓班,從清河公寓亮哥開始,到宿舍另外五位室友,漸漸認識更多人,還算適應額不錯。但走在北京的馬路上,多少還是有些陌生,不過就如宿舍一樣,來的時候臟兮兮,經過一番打掃后,干凈了不少,我也會很快習慣在這邊的生活,精力全放在linux上!   &nb…

    Linux干貨 2016-08-05
  • 磁盤配額配置

     實現磁盤配額 1、啟用home家目錄下的磁盤配額掛載選項vim /etc/fstab #在vim下可通過r!blkid /dev/sdb1調取UUIDUUID=aqvKA0-bL5B-MsuF-PIzQ-fl3P-G7E0-j3UlOI    /home   ext4  &nb…

    Linux干貨 2016-08-30
欧美性久久久久