Linux的進程管理shell
進程:簡單來講就是一個運行中的程序的副本,是進程的一個實例,它是有生命週期的服務器
進程的建立:進程都是由其父進程建立的,最開始的進程就是init。網絡
進程優先級:0-139session
實時優先級:1-99;多線程
靜態優先級:100-139,對於靜態來講數字越小優先級越高,app
優先級還有一個Nice值,值爲-20(對應100),19(對應19),能夠經過調整Nice值來調整優先級。socket
進程分爲守護進程和前臺進程,守護進程就是在系統引導過程當中啓動的進程,跟終端無關的進程;前臺進程跟終端有關,經過終端啓動的進程。(也能夠把前臺進程送日後臺以守護進程運行)tcp
進程狀態:ide
運行狀態:running工具
就緒態:ready
睡眠態:有分爲可中斷interruptablesleeping;不可中斷uninterruptable sleeping
中止態:stopped,暫停於內存中,但不會被調度,除非手動啓動之
僵死態:zombie
Linux中進程查看及管理的工具備pstree ,ps,top,htop,glances,dstat,vmstat等
Linux系統各進程的相關信息都保存在/proc/PID目錄下的各文件中,各類查看工具也是讀取這裏面的信息,顯示爲咱們更好理解的信息
(1) pstree命令:查看進程樹的
CentOS6的顯示結果,能夠看到init是最開始是的進程
CentOS7中查看的以下,不是init了而是systemd
(2) ps命令:查看進程的運行狀態信息等,仍是一個至關強大的命令
支持兩種風格,帶‘-’和不帶‘-’的
參數:
-a:與終端相關的進程
-e:顯示全部進程
-f:顯示完整格式程序信息
-u:以用戶爲中心組織進程狀態的信息顯示
-x:與終端無關的進程
-F:顯示完整格式的進程信息
-H:以進程層級格式顯示進程相關信息
經常使用組合:-aux,-ef,-eFH,-axo等
還可使用-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:優先級,rtprio:實時優先級
ps -aux顯示的信息有如下幾列
USER:用戶名;PID:進程號;%CPU:CPU利用率;%MEM:內存使用率;
VSZ:Virtual memory Size,虛擬內存集(虛擬地址大小);RSS:ReSident Size,常駐內存集(物理內存大小);TTY:是否與終端有關,?表示無關
STAT:進程狀態
R:running;S:interruptable sleeping;D:uninterruptablesleeping
T:stopped;Z:zombie(父進程會替子進程收屍);x:死亡狀態
+:前臺進程;l:多線程進程;N:低優先級進程;<:高優先級進程;
s:session leader,某一個會話的leader進程
START:開始時間
TIME:用掉用的CPU時間
COMMAND:所執行的命令
ps –ef
(3) pgrep:完成進程管理信息的過濾;pkill:殺死進程的;
兩個命令的用法格式相近,放在一塊說明
語法格式:pgrep [options]pattern(用戶名);pkill [options] pattern
參數:
-u uid:effective user 有效用戶ID
-U uid: real user 實際的用戶ID
-t terminal: 與指定終端相關的進程
-l: 顯示進程名,
-a: 顯示完整格式的進程名
-P pid: 顯示其父進程爲此處指定的進程的進程列表
pgrep – u root –l
(4) pidof:根據進程名獲取進程的ID號
以上命令顯示的都是進程的靜態信息
下面是顯示進程動態信息的命令
(5) top:動態刷新顯示進程的信息,是一個交互式的進程狀態實時查看工具
默認排序是CPU的利用率
排序:
P:以佔據的CPU百分比;
M:佔據內存百分比;
T:累積佔據CPU時長;
首部信息顯示:
uptime信息:l命令(顯示或不顯示)
tasks(進程樹)及cpu信息:t命令
cpu分別顯示:1 (數字)
memory信息:m命令
退出命令:q
修改刷新時間間隔:s
終止指定進程:k
選項:
d #: 指定刷新時間間隔,默認爲3秒;
-b: 以批次方式;
-n #: 顯示多少批次;
(6) htop:是基於文本模式的、交互式的進程查看器,主要用於控制檯或shell中,是top的高級版
這個工具在系統中通常不是默認安裝的,須要本身進行安裝,使用yum進行安裝就能夠了(若是不會看本人之前的博客,或網上搜索下)
經常使用選項:
F1 : 查看htop使用說明;F2 : 設置;F3 : 搜索進程;F4 : 過濾器,按關鍵字搜索;
F5 : 顯示樹形結構;F6 : 選擇排序方式;F7 : 減小nice值,這樣就能夠提升對應進程的優先級; F8 : 增長nice值,這樣能夠下降對應進程的優先級;F9 : 殺掉選中的進程;F10 : 退出htop或者q退出;
搜索選項:
l :顯示進程打開的文件: 若是安裝了lsof,按此鍵能夠顯示進程所打開的文件;
u :顯示全部用戶,並能夠選擇某一特定用戶的進程;
s : 將調用strace追蹤進程的系統調用;
t : 顯示樹形結構;
H :顯示/隱藏用戶線程;
I :倒轉排序順序;
K :顯示/隱藏內核線程;
M :按內存佔用排序;
P :按CPU排序;
T :按運行時間排序;
上下鍵或PgUP, PgDn : 移動選中進程;
左右鍵或Home, End : 移動列表;
Space(空格) : 標記/取消標記一個進程;
命令能夠做用於多個進程
使用時,直接htop回車就能夠了
F2能夠設置要顯示信息內容
-d #: 指定延遲時間;
-u UserName: 僅顯示指定用戶的進程;
-s COLOMN: 以指定字段進行排序;
命令:
s:跟蹤選定進程的系統調用;
l:顯示選定進程打開的文件列表;
a:將選定的進程綁定至某指定CPU核心;
t:顯示進程樹
(7) vmstat命令:對操做系統的虛擬內存、進程、CPU活動進行監控,它對系統的總體狀況進行統計 命令使用格式:
vmstat [options] [delay [count]]
選項:-s:顯示內存的統計數據
顯示的信息的解釋:
procs:
r:等待運行的進程的個數;
b:處於不可中斷睡眠態的進程個數;(被阻塞的隊列的長度);
memory:
swpd: 交換內存的使用總量;
free:空閒物理內存總量;
buffer:用於buffer的內存總量;
cache:用於cache的內存總量;
swap:
si:數據進入swap中的數據速率(kb/s)
so:數據離開swap中的數據速率(kb/s)
io:
bi:從塊設備讀入數據到系統的速率;(kb/s)
bo: 保存數據至塊設備的速率;
system:
in: interrupts, 中斷速率;
cs: context switch, 進程切換速率;
cpu:
us:用戶進程執行時間(user time)
sy:系統進程執行時間(system time)
id:空閒時間(包括IO等待時間),中央處理器的空閒時間 。以百分比表示。
wa:等待IO時間
(8) pmap命令:顯示一個進程的內存映射
語法格式:
pmap [options] pid [...]
-x: 顯示詳細格式的信息;
pmap查看的信息,能夠經過另一種方法實現:
#cat /proc/PID/maps
(9) glances命令:在用戶的終端上實時動態的顯示重要的系統數據和變化。顯示的數據包括:CPU、內存、磁盤、網絡等使用狀況,內核、運行隊列、負載、I/O 狀態、消耗資源最多的進程等等
Glances 能夠單機使用,也能夠客戶端-服務器模式多機使用。單機使用很簡單,直接運行就能夠了:
客戶端-服務器模式稍微複雜一點,須要在一臺機器上以服務器模式啓動 glances -s,另一臺機器以客戶端模式鏈接 glances -c. 好比在有兩臺機器 A 和 B 都裝了 glances,要想在 A 上看 B 上的 glances 的話須要事先在 B 上用服務器模式啓動 glances(假設 B 的 IP 地址是 172.16.100.18):
# glances -s
而後再從 A(客戶端)用 Glances 訪問 B(服務器):
# glances -c 172.16.100.18
glances命令格式:
glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P password] [--password] [-t refresh] [-f file] [-o output]
經常使用的選項:
-b: 以Byte爲單位顯示網卡數據速率;
-d: 關閉磁盤I/O模塊;
-f/path/to/somefile: 設定輸入文件位置;
-o{HTML|CSV}:輸出格式;
-m: 禁用mount模塊
-n: 禁用網絡模塊
-t #: 延遲時間間隔
-1:每一個CPU的相關數據單獨顯示;
glances
其中顯示的字段的意義以下:
VIRT: 虛擬內存大小
RES: 進程佔用的物理內存值
%CPU:該進程佔用的 CPU 使用率
%MEM:該進程佔用的物理內存和總內存的百分比
PID: 進程 ID 號
USER: 進程全部者的用戶名
TIME+: 該進程啓動後佔用的總的 CPU 時間
IO_R 和 IO_W: 進程的讀寫 I/O 速率
NAME: 進程名稱
NI: 進程優先級
S: 進程狀態,其中 S 表示休眠,R 表示正在運行,Z 表示僵死狀態。
使用h查看裏面的內建命令
交互界面下可使用的快捷鍵的功能以下:
h : 顯示幫助信息
q : 離開程序退出
c :按照 CPU 實時負載對系統進程進行排序
m :按照內存使用情況對系統進程排序
i:按照 I/O 使用情況對系統進程排序
p: 按照進程名稱排序
d : 顯示磁盤讀寫情況
w : 刪除日誌文件
l :顯示日誌
s: 顯示傳感器信息
f : 顯示系統信息
1 :輪流顯示每一個 CPU 內核的使用狀況(次選項僅僅使用在多核 CPU 系統)
(10) dstat命令:動態顯示CPU,disk,net,page,system負載狀況等
語法格式:
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相關的統計數據;
--top-cpu:顯示最佔用CPU的進程;
--top-io: 顯示最佔用io的進程;
--top-mem: 顯示最佔用內存的進程;
--top-lantency: 顯示延遲最大的進程;
--ipc 顯示ipc消息隊列,信號等信息
--socket 用來顯示tcp udp端口狀態
-a all 此爲默認選項 等同於 -cdngy
-v vmstat 等同於 -pmgdsc -D total
--output 文件 此選項也比較有用,能夠把狀態信息以csv的格式重定向到指定的文件中,以便往後查看
(11) kill命令:向進程發送控制信號,以實現對進程管理
顯示當前系統可用信號:
# 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
向進程發信號:
kill [-SIGNAL] PID...
終止「名稱」之下的全部進程:
killall[-SIGNAL] Program
上面重要的是top,htop,glances,dstat的使用,若是想查看這幾個命令的更詳細的操做,使用man命令。