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 21:49
下一篇 2016-09-11 09:29

相關推薦

  • Linux命令date命令詳解

    在linux環境中,熟練運用date命令來表示自己想要表示的時間,肯定可以給自己的工作帶來諸多方便,下面是詳細的使用說明和示例 在linux環境中,不管是編程還是其他維護,時間是必不可少的,也經常會用到時間的運算,熟練運用date命令來表示自己想要表示的時間,肯定可以給自己的工作帶來諸多方便。 1.命令格式:date[參數]… [+格式] 2.命…

    2017-07-18
  • 計算機;GPL等開源協議;Linux 哲學思想的煉成;MBR & GPT—fazion in magedu 20.July

    入門Linux的基礎知識 fazionlan blog in 178Linux.July 22nd. 第一臺計算機 1946第一臺計算機ENIAC(electronic numerical integrator and calculator)在美國濱州大學誕生,是美國奧伯丁武器試驗場為了滿足計算彈道而研制的 馮諾依曼體系結構:1946年數學家提出運算器、控制…

    Linux干貨 2016-07-29
  • sed命令實戰

    1、刪除/etc/grub2.conf文件中所有以空白開頭的行行首的空白字符  [root@centos7 ~]# sed -r 's#^[[:space:]]+##g' /etc/grub2.cfg # # DO NOT EDIT THI…

    Linux干貨 2016-08-15
  • 軟連接與硬鏈接區別

    前言: 今天學習了文件系統,簡單的接觸到文件系統構成的原理。原來我們不管在linux和win上面刪除某個文件只是刪除一個鏈接而已。而linux把鏈接分為軟鏈接和硬鏈接。接下來我們就從文件系統構成的基本原理出發來說明下linux軟鏈接和硬鏈接的區別。 文件系統簡述: linux的哲學就是一切皆文件。為了方便人們的使用,我們可以通過看文件名來區分不同的文件。但作…

    Linux干貨 2016-10-31
  • Nginx 負載均衡多個nmmp主機

    設計拓撲圖 一、Memcache簡介 cache(緩存系統) 高性能分布式緩存服務器,緩存所有的“可流式化”數據:livejournal旗下Danga Interacive公司 程序=指令+數據 指令:程序 數據:IO操作 文件系統: 特征:協議簡單  基于libevent的事件處理  內置內存存儲方式  memcached 不…

    2014-09-17
  • 淺談RPM

    淺談RPM    [先絮叨下編譯啊]   1、 庫:其實就是一個程序模塊(它沒有執行入口,不能獨立執行,只能被能獨立運行的程序調用時執行)你可以把它想象成工具螺絲刀,可執行的程序是就是你自己;螺絲刀能自己干活嗎?沒有螺絲刀能擰螺絲嗎?或者說你現在制作一個? 螺絲刀可以實現這個功能但需要你來執行這個動作。   2、靜態編譯:將程序所需要的所有的庫都編…

    Linux干貨 2015-04-27
欧美性久久久久