linux進程管理

進程概念

內核的功用:進程管理、文件系統、網絡功能、內存管理、驅動程序、 安全功能等
Process:  運行中的程序的一個 副本,是被 載入內存的一個指令集合
    進程ID (Process ID,PID)號碼被用來標記各個進程
    UID 、GID、和SELinux語境決定對文件系統的存取和訪問權限,
    通常從執行進程的用戶來繼承
    存在生命周期
task struct:Linux內核存儲進程信息的數據結構格式
task list :多個任務的的task struct 組成的鏈表
進程創建:
    init :第一個進程
       父子關系
    進程:都由其父進程創建,COW       fork(), clone()

進程優先級

進程優先級:

imageimage

系統優先級: 數字越小,優先級越高
0-139(CentOS4,5)默認為120
    各有140 個運行隊列和過期隊列
    運行隊列和過期隊列互換**        
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)

image

進程相關概念

進程內存:
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
睡眠態:
      可中斷:interruptable
     不可中斷:uninterruptable
停止態:stopped,暫停于內存中,但不會被調度,除非手動啟動
僵死態:zombie,結束進程,父進程結束前,子進程不關閉

系統管理工具

進程的分類:
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
  -p:列舉編號
ps: process state
ps - report a snapshot of the current processesLinux系統各進程的相關信息均保存在/proc/PID 目錄下的各文件中

進程管理工具

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 ,會話(子進程)發起者

列舉進程ps

適用ps 來查看進程信息  ps [OPTION]...
支持三種選項:
     
    UNIX 選項如-A -e
    BSD 選項如 a
    GUN 選項如--help
? 默認顯示當前終端中的進程
? a 選項包括所有終端中的進程
? x 選項包括不連接終端的進程
? u 選項顯示進程所有者的信息

image

? f 選項顯示進程的父進程
? o 屬性… 選項顯示定制的信息:o必須在最后
# ps axo pid,comm,%cpu,%mem,state,tty,euser,ruser

image

常用組合:
-ef  
-e:  顯示所有進程 ==ax-f:  顯示完整格式程序信息

image

-eFH    -F:顯示更完整格式的進程信息    -H:以進程層級格式顯示進程相關信息(父子進程關系)
優先級
ni: nice值pri: priority ,優先級psr: processor, CPU 編號rtprio: 實時優先級
自定義
# ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm
    pid,    進程ID
    tid,    線程ID    class,  類型
    rtprio,實時優先級
    ni,    nice優先級
    pri,    實時優先級
    psr,    cpu編號
    pcpu,   CPU占用率
    stat,   進程狀態
    comm    發起命令
# ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
    euid,   有效用戶ID   進程執行者
    ruid,   實際用戶ID   進程發起者
    tty,     終端號
    tpgid,  控制tty進程組ID
    sess,    會話ID
    pgrp,    進程組ID
    ppid,    父進程ID
參數 描述
pcpu CPU占用率
pid 進程ID
ppid 父進程ID
pmem 內存使用率
comm 可執行文件
cmd 簡單命令(simplecommand)
user 啟動進程的用戶
nice 優先級(niceness)
time 累計的CPU時間
etime 進程啟動后累計時間
tty 當前終端進程
euid 有效用戶ID 進程執行者
stat 進程狀態
ruid 真實用戶ID 進程發起者

搜索進程

最靈活:ps  選項 |  其它命令按預定義的模式:pgrep
pgrep [options] pattern
-u uid: effective user,生效者-U uid: real user ,真正發起運行命令者-t terminal:  與指定終端相關的進程-l: 顯示進程名
# pgrep -t pts/1 -l
-a: 顯示完整格式的進程名(centos6無效)
# pgrep -t pts/0 -a
-P  pid:顯示指定進程的子進程
# pgrep -P 3522 -l
按確切的程序名稱:/sbin/pidof$pidof bash
[root@lvasu ~]# pidof bash3457
系統工具
uptime:
顯示當前時間,系統已啟動的時間、當前上線人數,系統平均負載(1 、5 、10 分鐘的平均負載,一般不會超過1)
[root@lvasu ~]# uptime
 23:47:00 up  2:05,  4 users,  load average: 0.06, 0.05, 0.05
系統平均負載:
指在特定時間間隔內運行隊列中的平均進程數 。
如果每個CPU內核的當前活動進程數不大于3的話,那么系統的性能良好。 如果每個CPU 內核的任務數大于5 ,那么這臺機器的性能有嚴重問題。
如果linux 主機是1 個雙核CPU 的話,當Load Average 為6 的時候說明機器已經被充分使用了。

進程管理工具

top :有許多內置命令:
排序: (CAPM)
P :以占據的CPU 百分比,%CPUM :占據內存百分比,%MEM
T :累積占據CPU 時長,TIME+
首部信息顯示:
uptime 信息: l顯示
tasks 及cpu 信息:t 顯示
cpu 分別顯示:1 ( 數字)memory 信息:m 命令
      
退出命令:q修改刷新時間間隔:s #   單位s 
終止指定進程:k
保存文件:W   (CAPS)   
       位置 /root/.toprc
欄位信息簡介
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): 任務所有者IDUSER (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:  以指定字段進行排序;子命令:(htop 界面實現)
    s:  跟蹤選定進程的系統調用;
    l:  顯示選定進程打開的文件列表;
    a:將選定的進程綁定至某指定CPU 核心;
    t:顯示進程樹

內存工具

vmstat 命令:虛擬內存信息
vmstat [options] [delay [count]]
    vmstat 2 5

image

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 codesy: Time spent running kernel codeid: 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:  顯示內存的統計數據
pmap 命令 :進程對應的內存映射
pmap [options] pid [...]
    -x:  顯示詳細格式的信息;
    # pmap 1

image

另外一種實現:    # cat /proc/PID/maps
[root@lvasu ~]# cat /proc/1/maps

系統監控工具

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 logsc Sort processes by CPU% b Bytes or bits for network I/Om Sort processes by MEM% w Delete warning logsp Sort processes by name x Delete warning and critical logsi Sort processes by I/O rate 1 Global CPU or per-CPU statsd Show/hide disk I/O stats h Show/hide this help screenf Show/hide file system stats t View network I/O as combinationn 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 -s -B 10.1.27.100
客戶端模式:
    glances -c IPADDR
    IPADDR :要連入的服務器端地址
# glances -c 10.1.27.101
dstat 命令:系統資源統計
dstat [-afv] [options..] [delay [count]]
    -c:  顯示cpu 相關信息      -C #,#,...,total      include cpu0, cpu3 and total    -d:  顯示disk 相關信息      -D total,sda,sdb,...   include hda and total    -g :顯示page 相關統計數據    -m:  顯示memory 相關統計數據    -n:  顯示network 相關統計數據    -p:  顯示process 相關統計數據    -r:  顯示io 請求相關的統計數據    -s:  顯示swapped 相關的統計數

image

--tcp--udp--unix--raw--socket--ipc--top-cpu :顯示最占用CPU 的進程--top-io:  顯示最占用io 的進程--top-mem:  顯示最占用內存的進程--top-latency:  顯示延遲最大的進程

image

進程管理工具

kill 命令:
  向進程發送控制信號,以實現對進程管理
  顯示當前系統可用信號: kill -l
  常用信號:man 7 signal    1) SIGHUP:  無須關閉進程而讓其重讀配置文件    2) SIGINT:  中止正在運行的進程;相當于Ctrl+c    9) SIGKILL:  殺死正在運行的進程    15) SIGTERM :終止正在運行的進程  (正常關閉,默認15)    18) SIGCONT :繼續運行    19) SIGSTOP :后臺休眠
  指定信號的方法:
     (1)  信號的數字標識;1, 2, 9
     (2)  信號完整名稱;SIGHUP
     (3)  信號的簡寫名稱;HUP
      
按PID :kill [-SIGNAL] pid …
按名稱:killall [-SIGNAL] comm…
# killall -9 ping
按模式:pkill [options] pattern
    -SIGNAL    -u uid: effective user ,生效者    -U uid: real user ,真正發起運行命令者    -t terminal:  與指定終端相關的進程    -l: 顯示進程名    -a: 顯示完整格式的進程名    -P pid:  顯示父 進程為此處指定的進程的進程列表
# pkill -u root# pkill -9 -t pts/1

進程優先級

進程優先級調整:
    靜態優先級:100-139
    進程默認啟動時的nice值為0 ,優先級為120
    只有根用戶才能降低nice值(提高優先性)
nice 命令:
    nice [OPTION] [COMMAND [ARG]...]
    nice -n -5 htop 
renice 命令:
    renice [-n] priority pid...  運行中的進程
查看:
    ps axo pid,comm,ni

未涉及到的命令

sat,tsar,lostat,lftop,nethog,....

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

(0)
lvasulvasu
上一篇 2016-09-12 20:14
下一篇 2016-09-12 20:43

相關推薦

  • linux開篇六式

    第一式. Linux上的文件管理類命令,其常用的使用方法及其相關示例。       mkdir, 創建目錄       rmdir,刪除目錄       tree, 顯示目錄層級       cat和tac均用于查看文件,cat是從文件首向…

    Linux干貨 2016-10-13
  • 軟件包管理之yum

    本節主要是對linux軟件包管理中的yum的淺解 1、冒泡法對數組內數據排序 2、博客:        yum命令淺解    yum [options] [command] [package …]      …

    Linux干貨 2016-08-25
  • Linux目錄結構

    Linux目錄結構 查看目錄(/) 樹狀目錄結構: 常見目錄的解釋 Linux 下的文件類型 路徑 Linux目錄結構 查看目錄(/) 登錄系統后,在當前命令窗口下輸入命令: [root@localhost ~]# ls /bin   dev  home  lib64       media &nb…

    Linux干貨 2016-09-06
  • Python線程指南

    本文介紹了Python對于線程的支持,包括“學會”多線程編程需要掌握的基礎以及Python兩個線程標準庫的完整介紹及使用示例。 注意:本文基于Python2.4完成,;如果看到不明白的詞匯請記得百度谷歌或維基,whatever。 尊重作者的勞動,轉載請注明作者及原文地址 >.< 1. 線程基礎 1.1. 線程狀態 線程有5種狀態,狀態轉換的過程如…

    2015-03-13
  • btrfs文件系統常用命令使用

    Btrfs,也可稱為B-tree,Butter FS,Better FS,是CentOS7中一種新型的文件系統。 核心特性: 1.多物理卷支持,可由多個物理卷(pv)組成,支持raid,以聯機添加刪除 2.支持寫實復制(Copy on Write,Cow) 復制一份修改,改好之后用指針替換,出錯時指回原本文件。而不是就地修改 3.數據及元數據校驗碼:chec…

    Linux干貨 2016-03-07
欧美性久久久久