Linux進程管理

進程管理

    進程概念

    ? 內核的功用:進程管理、文件系統、網絡功能、內存管理、驅動程序、 安全功能等

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

    進程ID( Process ID, PID)號碼被用來標記各個進程

    UID、 GID、和SELinux語境決定對文件系統的存取和訪問權限,

    通常從執行進程的用戶來繼承

    存在生命周期

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

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

    ? 進程創建:

    init(centos6):第一個進程

    父子關系

    systemd(centos7 )

    父子進程

    進程:都由其父進程創建, COW

    fork(), clone()

    blob.png

    blob.png

    進程優先級

    ? 進程優先級:

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

    0-139( CentOS4,5)

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

    當進程發出請求使用cpu時,會按先后順序或者系統優先級大小,在運行隊列中等候。由于cup并非將全部時間分配給一個進程使用,而是將單位時間分為多個片段,然后按進程的優先級或多或少分配,當一個進程使用完所分配的時間,但是進程還沒有完全結束,就會按順序進入過時隊列;當cpu完成所有運行隊列的進程是,就會講過時隊列變為運行隊列,再次運行,直至進程結束。

    0-98, 99( CenOS6)

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

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

    ? Big O:時間復雜度,用時和規模的關系

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

    blob.png

    進程相關概念

    ? 進程內存:

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

    如同磁盤一樣,內存并不會應內存要多少空間,就會講整段連續空間分配給進程,內存會事先將內存如磁盤一樣分block,而內存則成為page frame頁框,進程需要多大的空間,內存將會按其所需分配相應數量的頁框,或連續或不連續,然后標記其位置,cup會按位置調用指定地址的內存內容

    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,在系統引導過程中啟動的進程, 和終端無關進程(一般標記為?)

    前臺進程:跟終端相關,通過終端啟動的進程(一般標記其終端類型與終端號)

    注意:兩者可相互轉化

    [root@www ~]# ps aux |head

    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

    root      2107  0.0  0.4  52976  4744 ?        S    07:19   0:00 /usr/libexec/polkit-1/polkitd

    rtkit     2118  0.0  0.1 168456  1192 ?        SNl  07:19   0:01 /usr/libexec/rtkit-daemon

    root      2123  0.0  0.2 141788  2064 ?        S    07:19   0:00 pam: gdm-password

    root      3272  0.0  0.4 102084  4140 ?        Ss   14:07   0:01 sshd: root@pts/1,pts/0

    root      3276  0.0  0.1 108452  1900 pts/1   Ss+  14:07   0:00 -bash

    postfix   4608  0.0  0.3  80976  3404 ?        S    22:20   0:00 pickup -l -t fifo -u

    root      4674  0.0  0.1 108352  1816 pts/0   Ss   22:51   0:00 -bash

    root      4697  0.0  0.1 110248  1148 pts/0   R+   22:51   0:00 ps aux

    root      4698  0.0  0.0 100952   644 pts/0   S+   22:51   0:00 tail

    ? 進程狀態:

    運行態: running

    就緒態: ready

    睡眠態:

    可中斷: interruptable

    不可中斷: uninterruptable

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

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

    系統管理工具

    ? 進程的分類:

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

    如圖形界面,比較耗cpu資源

    IO-Bound: IO密集型,交互

    如dd命令,cpu使用率低,但是磁盤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目錄下的各文件中

    8

    列舉進程ps

    ? 適用ps來查看進程信息

    ? ps [OPTION]…

    ? 支持三種選項:

    UNIX選項 如-A -e

    BSD選項 如a

    GUN選項 如–help

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

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

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

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

    ? f 選項顯示進程的父進程

    ? o 屬性… 選項顯示定制的信息:

    pid、 comm、 %cpu、 %mem、 state、 tty、 euser、 ruser

    一般組合ps -aux 使用

    進程管理工具

    ? VSZ: Virtual memory SiZe,虛擬內存集,線性內存

    ? RSS: ReSident Size, 常駐內存集

    ? STAT:進程狀態

    R: running

    S: interruptable sleeping

    D: uninterruptable sleeping

    T: stopped

    Z: zombie

    +: 前臺進程

    l: 多線程進程

    N:低優先級進程

    <: 高優先級進程

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

    blob.png

    進程管理工具

    ? 常用組合: -ef

    -e: 顯示所有進程

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

    ? 常用組合: -eFH

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

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

    ? 常用組合:自定義

    -eo pid,tid,class,rtprio,ni,pri,psr,

    pcpu,stat,comm

    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

    blob.png

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

    ? 系統平均負載:

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

    ? 如果每個CPU內核的當前活動進程數不大于3的話,那么

    系統的性能良好。 如果每個CPU內核的任務數大于5,那么這臺機器的性能有嚴重問題。

    ? 如果linux主機是1個雙核CPU的話,當Load Average 為6的時候說明機器已經被充分使用了。

    (lscpu   可查看cpu情況)

    進程管理工具

    ? top:有許多內置命令:

    排序:

    P:以占據的CPU百分比,%CPU

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

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

    首部信息顯示:

    uptime信息: l命令

    tasks及cpu信息: t命令

    cpu分別顯示: 1 (數字)

    memory信息: m命令

    退出命令: q

    修改刷新時間間隔: s

    終止指定進程: k

    保存文件: W

    blob.png

    top命令

    ? 欄位信息簡介

    us:用戶空間

    sy:內核空間

    ni:調整nice時間

    id:空閑

    wa:等待IO時間

    hi:硬中斷

    si:軟中斷(模式切換)

    st:虛擬機偷走的時間

    進程管理工具

    ?欄位信息簡介

    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秒

    -b: 以批次方式

    -n #: 顯示多少批次

    ? htop命令:需從Fedora-EPEL源安裝

    http://172.16.0.1/fedora-epel/7/x86_64

    選項:

    -d #: 指定延遲時間;

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

    -s COLUME: 以指定字段進行排序;

    子命令:

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

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

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

    t: 顯示進程樹

    ? vmstat命令:虛擬內存信息

    vmstat [options] [delay [count]]

    vmstat 2 5(隔2秒顯示一次一共顯示5次)

    blob.png

    ? 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: 顯示內存的統計數據

    blob.png

    pmap命令:進程對應的內存映射

    ? pmap [options] pid […]

    -x: 顯示詳細格式的信息;

    #pmap 1

    另外一種實現:

    # cat /proc/PID/maps

    blob.png

    glances命令: EPEL源

    ? glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P

    password] [–password] [-t refresh] [-f file] [-o output]

    ? 內建命令:

    a Sort processes automatically l Show/hide logs

    c Sort processes by CPU% b Bytes or bits for network I/O

    m Sort processes by MEM% w Delete warning logs

    p Sort processes by name x Delete warning and critical logs

    i Sort processes by I/O rate 1 Global CPU or per-CPU stats

    d Show/hide disk I/O stats h Show/hide this help screen

    f Show/hide file system stats t View network I/O as combination

    n Show/hide network stats u View cumulative network I/O

    s Show/hide sensors stats q Quit (Esc and Ctrl-C also work)

    y Show/hide hddtemp stats

    ? 常用選項:

    -b: 以Byte為單位顯示網卡數據速率

    -d: 關閉磁盤I/O模塊

    -f /path/to/somefile: 設定輸入文件位置

    -o {HTML|CSV}:輸出格式

    -m: 禁用mount模塊

    -n: 禁用網絡模塊

    -t #: 延遲時間間隔

    -1:每個CPU的相關數據單獨顯示

    ? C/S模式下運行glances命令

    ? 服務模式:

    glances -s -B IPADDR

    IPADDR: 指明監聽的本機哪個地址

    ? 客戶端模式:

    glances -c IPADDR

    IPADDR:要連入的服務器端地址

    dstat命令:系統資源統計

    blob.png

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

    -c: 顯示cpu相關信息

    -C #,#,…,total

    -d: 顯示disk相關信息

    -D total,sda,sdb,…

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

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

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

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

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

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

    –tcp

    –udp

    –unix

    –raw

    –socket

     –ipc

    –top-cpu:顯示最占用CPU的進程

    –top-io: 顯示最占用io的進程

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

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

    kill命令:(默認是發15信號)

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

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

    常用信號: 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…

    killall bash

    按模式: pkill [options] pattern

    -SIGNAL

    -u uid: effective user,生效者

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

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

    -l: 顯示進程名

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

    -P pid: 顯示父進程為此處指定的進程的進程列表

    作業管理

    ? Linux的作業控制

    前臺作業:通過終端啟動,且啟動后一直占據終端;

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

    ? 如何讓作業運行于后臺?

    (1) 運行中的作業: Ctrl+z(前臺到后臺,在后臺是休眠狀態)

    (2) 尚未啟動的作業: # COMMAND &

    將作業放置后臺,作業會有兩種狀態    后臺運行  與后臺休眠;但是后臺運行的作業有標準,有標準輸出也會正常輸出

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

    # nohup COMMAND & #screen;COMMAND

    ? 查看所有作業:

    # jobs

    ? 作業控制:

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

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

    # kill [%JOB_NUM]:終止指定的作業;(18是繼續在后臺運行;19是放置在后臺,停止狀態)

    并行運行

    f1.sh ;f2.sh ;f3.sh    順序運行

    ? 同時運行多個進程,提高效率

    ? vi all.sh

    f1.sh&

    f2.sh&

    f3.sh&

    然后運行all.sh

    ? (f1.sh&);(f2.sh&);(f3.sh&)

    ? { f1.sh& f2.sh& f3.sh& } 無名函數

    進程優先級(讓cpu多分配一點時間。然而并非所有程序提高優先級,就能更快工作,如ping,需要等待對方回應才能ping第二個包)

    普通用戶只能講優先級調大(nice優先級越大資源越少)

    blob.png

    ? 進程優先級調整:

    靜態優先級: 100-139

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

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

    ? nice命令:

    nice [OPTION] [COMMAND [ARG]…]

    nice -n {優先級} COMMAND

    ? renice命令:(運行狀態下更改)

    renice [-n] priority pid…

    ? 查看:

    ps axo pid,comm,ni

    

ps :搭配各種選項,可以詳細查看當前系統運行的所有進程信息

pstree:以樹形式,【搭配各種選型】查看當前系統所運行的大部分進程(可以直觀地查看進程之間的父子關系)

uptime:現在的時間 、系統開機運轉到現在經過的時間 、連線的使用者數量 、最近一分鐘,五分鐘和十五分鐘的系統負載

沒有更多選項,-V查看uptime版本號

Linux進程管理blob.png

vmstat:顯示的項目比較少(procs、memory、swap、disk、cpu),但是直觀

Linux進程管理blob.png

pmap:查看指定進程(pid)以及其所依賴的褲文件,內存映射。報告進程的地址空間和內存狀態信息

top:比ps更加詳細直觀查看系統運行的狀況,融合了ps、uptime、vmsta的功能,詳盡列出系統各硬件當前運行狀態,可執行kill命令(根據kill信號的不同,可對進程進行關閉,強制關閉,重啟等操作),相應的比上邊結束的工具所暫用系統資源大一點

Linux進程管理blob.png

htop:top的升級版(用戶相對關注的信息會高亮),有用戶交互的操作(ssh連接狀態下)

glances(需要EPEL源):與htop相同,但是比htop要耗系統資源

dstat:顯示系統狀況,不包括進程的監視,每秒刷新一次

kill:根于kill信號不同,對進程進行管理(不包括創建新進程)

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

(0)
hunterhunter
上一篇 2016-09-11 16:52
下一篇 2016-09-11 17:06

相關推薦

  • bash變量類型及區別之淺談

    變量類型,區別 位置變量$0 $1,$2,$# $@ $* 變量的類型:本地變量、環境變量、位置變量 本地變量:生效范圍為當前shell進程,對當前shell之外的其他shell進程包括當前shell的子進程均無效 環境變量:生效范圍為當前shell進程及子進程 位置變量:$1,…..$n,${10}來表示,用于放腳本在腳本代碼中調用通過命令行傳…

    Linux干貨 2016-08-12
  • 基于rsync+inotify實現數據實時同步傳輸

    前言 與傳統的cp、tar備份方式相比,rsync具有安全性高、備份迅速、支持增量備份等優點,通過rsync可以解決對實時性要求不高的數據備份需求,但隨著文件數量的增大和實時同步的要求,rsync已不能滿足需求,隨之rsync+inotify便應運而生。本文將講解rsync的基礎知識和如何基于rsync+inotify實現數據實時同步傳輸。 rsync相關介…

    Linux干貨 2015-04-27
  • 用戶和組管理類命令的使用

    1.列出當前系統所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示以此即可; who | cut -d' ' -f1 | sort | uniq 2.取出最后登錄到當前系統的用戶的相關信息; who | head&nb…

    Linux干貨 2016-11-21
  • 腳本編程之循環:for,while,until

    shell中的循環語句一般有: for   while   until 一、for     for 變量名 in 列表;do         循環體     d…

    Linux干貨 2016-08-18
  • 淺談vim使用

    vim常用命令總結 2013年10月12日 ? 綜合 ? 共 3264字 ? 字號 小 中 大 ?  評論關閉        vim 選擇文本,刪除,復制,粘貼   文本的選擇,對于編輯器來說,是很基本的東西,也經常被用到,總結如下: v    從光標當前位置開始,光標所經過的地…

    Linux干貨 2016-08-12
  • glob及IO重定向

    globbing: 文件名通配     匹配模式:元字符           *:匹配任意長度的任意字符    pa* ,*pa* ,*pa,  *p*a*    pa, paa, passwd    ?:  …

    Linux干貨 2016-12-21
欧美性久久久久