進程管理

1、進程的概念

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

 二、Process(進程):運行中的程序的一個副本,是被載入內存的一個指令集合

   進程ID(process ID,PID)號碼被用來標記各個進程
   UID,GID和SELinux語境決定文件系統的存取和訪問權限
   一般從執行進程的用戶來繼承
   存在生命週期前端

 三、Task struct(任務結構):Linux內核存儲進程信息的數據結構格式

 四、Task list(任務列表):多個任務的task struct組成的鏈表

 五、進程的建立:

  系統中的第一個進程時全部的進程的父進程,其它進程都須要在它之下建立進程,與其它進程的關係是父子關係,進程都由其父進程建立第一個進程被殺死其它全部進程都會崩潰
  Centos6與以前
   Init:第一個進程
  Centos7
   Systemd:第一個進程ios

 六、進程優先級

  進程優先級:數字越小,優先級越高
    0-139(centos 4,5)
      各有140個運行隊列和過時隊列
   0-98,99(centos6,7)
  實時優先級:99-0 值越大優先級越高
  Nice值:-20-19,對應系統優先級100-139或99vim

 七、Linux內核:搶佔式多任務

 八、進程的類型

  守護進程:在系統引導過程當中啓動的進程,和終端無 關進程
  前臺進程:跟終端相關,經過終端啓動的進程
  注意:二者可互相轉化centos

 九、進程狀態

  運行態:running
  就緒態:ready
  睡眠態:可中斷:interruptable
      不可中斷:uninterruptable
  中止態:stopped,暫停於內存,但不會被調度,除非手動啓動
  僵死態:zombie,結束進程,父進程結束前,子進程不關閉安全

 十、進程的分類:

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

 十一、Linux系統狀態的查看及管理工具:pstree, ps, pidof, pgrep, top, htop, glance, pmap, vmstat, dstat, kill, pkill, job, bg, fg, nohup

   pstree:顯示進程樹(以樹狀圖的方式顯示進程)
   ps:查看進程狀態
   Linux系統各進程的相關信息均保存在/proc/PID目錄下 的各文件中服務器

2、查看進程ps

   ps [選項]
   ps支持三種選項:
    UNIX選項 如-A -e
    BSD選項 如a
    GNU選項 如--help
   BSD方式
    ps 單獨一個ps顯示當前終端上運行的全部進程
    a 全部用戶在全部終端上運行的前臺進程
    x 當前用戶運行的全部進程(包括前臺進程和後臺daemon)
    u 選項顯示進程全部者的信息
    k [屬性]: 對屬性排序;例:ps k %cpu 按CPU使用率排序
    - - sort [屬性]: 對屬性排序;例:ps - -sort %cpu
    ax 全部用戶運行的全部進程
    aux 全部用戶運行的全部進程,結果中顯示用戶名
    f 顯示父子進程關係
    -C <命令關鍵字> :用進程名進行過濾
    axo配合
    o [屬性]:自定義輸出列,能夠跟多個屬性,屬性與屬性之間以逗號分隔
     %cpu:CPU使用率
     %mem:內存使用率
     pid:進程號
     uid:進程的所屬用戶的ID號
     user:進程所屬主
     gid:進程的所屬組的組ID
     group:進程所屬組
     cmd:命令的參數,命令的字符串;同args同樣
     comm:顯示命令的名字
     tty:顯示執行終端
     ruser:命令的發起人
     euser :命令的真正執行行
     vsz:虛擬內存集
     rss:常駐內存集
     stat:進程狀態
     ni: nice值 
      pri: priority 優先級 
     psr: processor CPU編號 
     rtprio: 實時優先級
這些屬性就是顯示的自定義的列信息,以下圖紅框所框之處
進程管理
   UNIX方式:
    -a 全部用戶在全部終端上運行的前臺進程
    -x 當前用戶運行的全部進程(包括前臺進程和後臺daemon)
    -ax 全部用戶運行的全部進程
    -aux 全部用戶運行的全部進程,結果中顯示用戶名
    -f 顯示當前終端上運行的全部進程
    -e 顯示全部進程
    -f 顯示完整格式程序信息
    -F: 顯示更完整格式的進程信息
    -H: 以進程層級格式顯示進程相關信息(顯示父子關係)
    -ef 以完整格式顯示全部進程
    -eF 以更完整格式顯示全部進程
    -efH 顯示父子進程關係
    -eo 自定義顯示結果,以下
     ps -eo %cpu,%mem,pid,nice,pri,stat,comm,vsz,rss,stat 網絡

3、進程狀態

  STAT :進程狀態
   R:running
   S: interruptable sleeping
   D: uninterruptable sleeping
   T: stopped
   Z: zombie
   +: 前臺進程
   l: 多線程進程
   L:內存分頁並帶鎖
   N:低優先級進程
   <:高優先級進程
   s: session leader,會話(子進程)發起者 session

4、進程優先級

  進程優先級調整
   靜態優先級:100-139
    進程默認啓動時的nice值爲0,優先級爲120
    只有根用戶才能下降nice值(提升優先性)
  nice 命令:
    nice [選項] pri [cmd [arg]] :在執行命令時設定它的nice值(pri:nice值;cmd:命令;arg:參數)
  renice 命令
   renice [-n] pri pid:從新設置一個進程的nice值(pri:nice值;pid:進程的進程號)
  查看:
   ps axo ni:查看nice值數據結構

5、搜索進程

  最靈活:ps 選項 |其餘命令
  按預約義的模式:pgrep(pgrep僅適用於匹配進程信息)
   pgrep [option] pattern
     -u uid: effective user,生效者
     -U uid: real user,真正發起運行命令者
    -t terminal: 與指定終端相關的進程
    -l: 顯示進程名
    -P pid: 顯示指定進程的子進程
  按確切的程序名稱:/sbin/pidof
    pidof bash :根據命令名來搜索出該命令的進程的pid(bash:命令名)

6、系統工具

  uptime
   顯示當前時間,系統已啓動的時間、當前上線人數,系統平均負載(一、五、10分鐘的平均負載,通常不會超過1)
  系統平均負載:
   指在特定時間間隔內運行隊列中的平均進程數
  一般每一個CPU內核的當前活動進程數不大於3,那麼系統的性能良好。若是每一個CPU內核的任務數大於5,那麼此主機的性能有嚴重問題
  若是Linux主機是1個雙核CPU,當load average爲6的時候說明機器已經被充分使用

7、進程管理工具top

  ps 這個工具查看進程只是臨時的,只能查詢出執行命令那一刻的全部進程,卻不是實時刷新的,有些死板,下面介紹一個top工具,它能夠實時查詢進程信息,更加方便咱們的管理

 一、使用top 的語法

    top [選項] [參數]
     -d #:指定刷新時間間隔,#秒刷新一次,單位爲秒,默認爲3秒
     -b:所有顯示全部進程
     -n # :刷新多少次後退出

 二、top:實時查看進程信息,有許多內置命令

   排序:
     P:以佔據CPU百分比,%CPU
     M:佔據內存百分比,%MEM
     T:累積佔據CPU時長,TIME+
   首部信息顯示:
     l:uptime信息
     t:tasks及CPU信息
    1:CPU分別顯示
    m:memory信息(內存)
    q:退出命令
    s:修改刷新時間間隔
    k:終止指定進程
    W:保存文件

 三、欄位信息簡介

進程管理
   us:用戶空間
   sy:內核空間
   ni:調整
   nice時間
   id:空閒
   wa:等待IO時間
   hi:硬中斷
   si:軟中斷(模式切換)
   st:虛擬機偷走的時間

8、高級進程管理htop

  除了top外還有一個top的加強版命令htop,系統默認狀況下沒有安裝,須要epel源來進行安裝,這裏不作epel的配置,直接經過yum install htop命令進行安裝,安裝後直接執行htop命令便可,htop較之top有了顏色,顯示界面上也更加好看。
進程管理

 一、htop [選項] [參數]

    -d #: 指定延遲時間;#秒後
   -u UserName: 僅顯示指定用戶的進程
   -s COLUME: 以指定字段進行排序

 二、htop模式下的子命令

   s: 跟蹤選定進程的系統調用
   l: 顯示選定進程打開的文件列表
   a:將選定的進程綁定至某指定CPU核心
   t: 顯示進程樹
   #:快速定位光標至PID爲#的進程上
   h:幫助信息,顯示該模式下的全部子命令
   q:退出

9、 動態顯示系統資源的使用狀況vmstat

  vmstat命令主要用來動態的顯示當前系統資源的使用狀況,也就是虛擬內存信息,這些資源包括:內存、磁盤、網絡、cpu等資源。
進程管理

 一、用法:vmstat [選項] [參數]

    -s:將一些時間致使的內存變化狀況列表說明
    -S:後面能夠跟單位;如K、M取代bytes的容量;例:vmstat -S K
    -d:列出磁盤的讀寫總量統計表
    #1 #2:#1,#2是兩個數字,#1秒刷新一次,刷新#2次,將刷新的當前系統資源的使用狀況顯示出來

二、每一行所表明的含義:

  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:user space,用戶運行程序佔用CPU的百分比
   sy: system(kernel space),用於運行內核佔用CPU的百分比
   id: idle,空閒CPU百分比
   wa: wait IO,等待I/O花費時間
   st: stolen,被虛擬機‘偷走’的百分比

10、統計CPU和設備IO信息

  Iostat:統計CPU和設備IO信息
   示例:iostat 1 10 :每一秒刷新一次統計出的CPU和設備信息,並顯示10次後自動退出

11、進程對應的內存映射

   pmap命令用來顯示當前正在運行的某一個進程所對應使用的內存的映射
   pmap [選項] PID [...]
    -x:顯示詳細格式的信息
  示例:pmap 1:顯示進程號爲1的進程對應的內存映射
  另外一種實現方法
    cat /proc/PID/maps :PID爲要查看的進程的PID

12、系統監控工具glances

  glances是一款用於Linux、BSD的開源命令行系統監控工具,它使用Python語言開發,可以見識CPU、負載、內存、磁盤I/O、網絡流量、文件系統、系統溫度等信息,優勢是glances能夠實時的顯示重要的系統信息,並每隔2秒動態刷新,它也不會消耗大量的CPU資源;可是glances在默認狀況下並不會安裝,須要自行安裝,
進程管理

 一、Glances能夠爲Unix和Linux性能專家提供監視和分析性能數據的功能,其中包括:

1.CPU使用率

2.內存使用狀況

3.內核統計信息和運行隊列信息

4.磁盤I/O速度、傳輸和讀/寫比率

5.文件系統中的可用空間

6.磁盤適配器

7.網絡I/O速度、傳輸和讀/寫比率

8.頁面空間和頁面信息

9.消耗資源最多的進程

10.計算機信息和系統信息

 二、glances的使用方法及經常使用的選項

  -b: 以Byte爲單位顯示網卡數據速率
  -d: 關閉磁盤I/O模塊
  -f /path/to/somefile: 設定輸入文件位置
  -o {HTML|CSV}:輸出格式
  -m: 禁用mount模塊
  -n: 禁用網絡模塊
  -t #: 延遲時間間隔
  -1:每一個CPU的相關數據單獨顯示

 三、C/S模式下運行glances命令

   glances支持遠程模式,便可以以C/S模式工做
   服務器模式:
     glances -s -B IP
      IP:指明監聽的本機哪一個地址
   客戶端模式:
    glances -c IP
      IP:要連入的服務器端地址

十3、系統資源統計

  dstat命令是一個能夠取代vmstat,iostat,netstat和ifstat這些命令的多功能產品,dstat能夠實時的看到全部系統資源,以列表的形式爲你提供選項信息並清晰地告訴你是在何種幅度和單位顯示輸出,默認狀況下每秒刷新一次,並顯示結果Ctrl+C退出,dstat在centos6和centos7系統上默認狀況下是沒有被安裝的,須要自行安裝後使用
進程管理

 一、dstat命令的選項

  短選項
    -c: 顯示cpu相關信息
    -C #,#,...,total
    -d: 顯示disk相關信息
    -D total,sda,sdb,...
    -g:顯示page相關統計數據
    -m: 顯示memory相關統計數據
    -n: 顯示network相關統計數據
    -p: 顯示process相關統計數據
    -r: 顯示io請求相關的統計數據
    -s: 顯示swapped相關的統計數據
  長選項
    - -tcp:顯示tcp套接字的相關的數據
    - -udp:顯示udp套接字的相關的數據
    - -unix:顯示unix sock接口相關的統計數據
    - -raw:顯示raw套接字的相關的數據
    - -socket:
    - -ipc:顯示進程間通訊相關的速率數據
    - -top-cpu:顯示最佔用CPU的進程 
    - -top-io: 顯示最佔用io的進程 
    - -top-mem: 顯示最佔用內存的進程 
    - -top-latency: 顯示延遲最大的進程

 二、dstat命令顯示的每一行信息

  Total-cpu-usage:cpu的使用率
  Dsk/total:磁盤讀寫速度
  Net/total:網絡設備發送和接收的數據總數
  Paging:系統的分頁活動,分頁指的是一種內存管理技術用於查找系統場景,一個較大的分頁代表系統正字使用大量的交換空間,或者說內存很是分散,大多數狀況下你都但願看到page in(換入)和page out(換出)的值是0 0.
  System:這一項顯示的是中斷(int)和上下文切換(csw)。這項統計僅在有比較基線時纔有意義。這一欄中較高的統計值一般表示大量的進程形成擁塞,須要對CPU進行關注。服務器通常狀況下都會運行一些程序,因此這項老是顯示一些數值。

十4、進程管理工具kill

  所謂進程管理就是向進程發送一些控制信號,來完成對進程的管理控制,咱們能夠經過kill 命令來顯示當前系統可用的信號,以及向進程發送信號指令

 一、顯示當前系統可用信號

   kill -l :顯示當前系統可用信號
   trap -l:顯示當前系統可用信號
進程管理
  經常使用的信號:
   SIGHUP:1, 無須關閉進程而讓其重讀配置文件
   SIGINT:2, 停止正在運行的進程;至關於Ctrl+c
   SIGQUIT:3,至關於ctrl+\
   SIGKILL:9, 強制殺死正在運行的進程
   SIGTERM:15,終止正在運行的進程
   SIGCONT:18,繼續運行
   SIGSTOP:19,後臺休眠

 二、指定信號的方法

  1.完整名稱,例如SIGINT

  2.簡寫名稱,例如INT

  3.數據代稱,例如2

 三、指定進程的方法

  1.按PID:kill [-SIGNAL] pid

    僅能管理一個進程

  2.按名稱:killall [-SIGNAL] cmd

   能夠管理全部的關於cmd的進程,包括不一樣終端的cmd進程

  3.按模式:pkill [-SIGNAL] [選項] pattern

    -SIGNAL(能夠省略,省略時默認爲9 SIGKILL)
   選項
    -u uid: 生效者的進程
    -U uid: 真正發起運行命令者的進程
    -t terminal: 與指定終端相關的進程,例:pkill -t pts/1
    -l: 顯示進程名(pgrep可用)
    -a: 顯示完整格式的進程名(pgrep可用)
    -P pid: 顯示指定進程的子進程

十5、做業管理

 一、Linux的做業控制

  前端做業:經過終端啓動,且啓動後一直佔據終端
後臺做業:可經過終端啓動,但啓動後即轉入後臺運行(釋放終端)

 二、讓前臺做業運行於後臺

  1.運行中的做業:Ctrl +Z(中斷進程,使其再也不運行,但依然在後臺有這個進程)
  2.還沒有啓動的做業:cmd &(在後臺執行該命令,可是依然在終端上顯示執行結果,但不影響在終端上輸入其餘命令並執行)
  後臺做業雖然被送日後臺運行,但其依然與終端相關;退出終端,將關閉後臺做業,若是但願送日後臺且剝離與終端的關係.
   nohup COMMAND &>/dev/null &
    screen;COMMAND

 三、查看當前終端全部做業:jobs

 四、做業控制:

  fg [[%]JOB_NUM]:把指定的後臺做業調回前臺
  bg [[%]JOB_NUM]:讓送日後臺的做業在後臺繼續運行
  kill [%JOB_NUM]: 終止指定的做業(JOB_NUM:做業號)

 五、並行運行多個進程,提升效率

  方法1   把其它須要運行的全部命令編輯到多個腳本中,而後在編輯一個腳本,在這個腳本里執行全部的腳本     vim all.sh     F1.sh&     F2.sh&     F3.sh&  方法2   編寫多個腳本,在命令行中寫一行一次性執行全部的腳本     (f1.sh&);(f2.sh&);(f3.sh&)  方法3    { f1.sh& f2.sh& f3.sh& }

相關文章
相關標籤/搜索