介紹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, report a snapshot of the current processes
Linux系統各進程的相關信息均保存在/proc/PID目錄下的各文件中,每一個PID都是一個進程號,PID中的cmdline文件說明了這個進程是由哪個文件啟動的;
ps [OPTION]... 選項:支持兩種風格
1) BSD風格,前面沒- ,
常用組合:aux
u: 以用戶為中心組織進程狀態信息顯示
a: 與終端相關的進程;
x: 與終端無關的進程;
~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
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,會話創建者,這個啟動后,會引起很多其他進程,如果它被終止,與它相關的進程也會終止
COMMAND: 由什么命令啟動的進程
2) 標准風格:
常用組合1:-ef (PPID是父進程號)
-e: 顯示所有進程
-f: 顯示完整格式程序信息
-U: 顯示指定用戶進程 ps -U root
-o: 自定義顯示輸出
常用組合2:-eFH
-F: 顯示完整格式的進程信息
-H: 以進程層級格式顯示進程相關信息
常用組合3:-eo, axo,指明要顯示的字段
例如: ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm
ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
ni: nice值
pri: priority,優先級
psr: processor, CPU
rtprio: 實時優先級
三. pgrep, pkill:
pgrep [options] pattern------進程顯示過濾,用法和pkill一樣,比如pgrep -u root -l
pkill [options] pattern
-u uid: effective user,真實有效的用戶
-U uid: real user,看到的用戶
-t terminal: 與指定終端相關的進程
-l: 顯示進程名
-a: 顯示完整格式的進程名
-P pid: 顯示其父進程為此處指定的進程的進程列表
四. pidof:
根據進程名獲取其PID;
五. top:
1)有許多內置命令(就是進入top顯示界面后直接按命令鍵):
排序:默認以CPU排序
P:以占據的CPU百分比;
M:占據內存百分比;
T:累積占據CPU時長;
首部信息顯示:
uptime信息:l命令
tasks及cpu信息:t命令, cpu分別顯示:1 (數字)
memory信息:m命令,其中us:用戶空間,sy:內核空間,ni:nice值,id:空閑時間,wa:等待I/O時間,hi:硬件中斷時間,si:軟件中斷時間,st:被虛擬技術偷走的時間
退出命令:q
修改刷新時間間隔:s
終止指定進程:k
2)參數選項:
-d #: 指定刷新時間間隔,默認為3秒;
-b: 以批次方式;自動翻頁
-n #: 顯示多少批次;比如 top -b -n 1--只顯示第一屏
六. htop命令:
選項:
-d #: 指定刷新時間間隔;
-u UserName: 僅顯示指定用戶的進程;
-s COLOMN: 以指定字段進行排序;
內建命令:
s: 跟蹤選定進程的系統調用;(上下鍵選進程)
l: 顯示選定進程打開的文件列表;
a:將選定的進程綁定至某指定CPU,比如有多個CPU時,要把進程運行在哪個CPU上
t: 顯示進程樹
注意:Fedora-EPEL源中提供此軟件,比如在鏡像源中指定base=mirrors.aliyun.com/epel/7/x86_64/
七 vmstat命令:虛擬內存狀態工具---經典
vmstat [options] [delay [count]] ,比如 vmstat 2,表示2秒刷新一次,vmstat 2 5,顯示5次退出
1)procs相關:
r:等待運行的進程的個數,單個CPU時,超過3個就說明CPU性能不夠了;
b:處於不可中斷睡眠態的進程個數;(被阻塞的隊列的長度);
2) memory:
swpd: 交換內存的使用總量;
free:空閑物理內存總量;
buffer:用於buffer的內存總量;
cache:用於cache的內存總量;
3)swap:
si:數據進入swap中的數據速率(kb/s)
so:數據離開swap中的數據速率(kb/s),重新載入內存
4)io:
bi:從塊設備(磁盤)讀入數據到系統(內存)的速率;(kb/s)
bo: 保存數據至塊設備的速率;
5)system:
in: interrupts, 中斷速率;
cs: context switch, 進程切換速率;
6)cpu:
us--用戶空間占據CPU的比例
sy--內核空間
id--空閑比例
wa--等待I/0完成所消耗的時間比例
st--被虛擬化技術偷走的比例
選項:
-s: 顯示內存的統計數據
八. pmap命令:
pmap - report memory map of a process,查看進程都占用了哪些內存空間
pmap [options] pid [...]
-x: 顯示詳細格式的信息;
另外一種實現方式:
# cat /proc/PID/maps
九. dstat命令:-系統資源統計數據,支持插件來擴展功能,比較好用
dstat [-afv] [options..] [delay [count]]
-c: 顯示cpu相關信息;
-C #,#,...,total ---顯示哪一個CPU信息
-d: 顯示disk讀寫相關信息;
-D total,sda,sdb,...單獨顯示某個disk,或全部disk
-g:顯示page相關統計數據;
-m: 顯示memory相關統計數據;
-n: 顯示network相關統計數據;
-p: 顯示process相關統計數據;
-r: 顯示io請求相關的統計數據;
-s: 顯示swapped相關的統計數據;
--tcp
--udp
--unix
--raw
--socket---相當於參數tcp,udp,raw一起用
--ipc ----進程間通訊的相關信息
--top-cpu:顯示最占用CPU的進程;
--top-io: 顯示最占用io的進程;
--top-mem: 顯示最占用內存的進程;
--top-latency: 顯示延遲最大的進程,運行起來最慢,跟不上CPU;
十. kill命令:
向進程發送控制信號,以實現對進程管理,不單是殺死進程
顯示當前系統可用信號:
# kill -l 列出kill支持能發出的信號
# 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,就是把前面的SIG去掉就行
向進程發信號:
kill [-SIGNAL] PID...
終止“名稱”之下的所有進程:
killall [-SIGNAL] Program
十一. Linux的作業控制
前台作業:通過終端啟動,且啟動后一直占據終端;
后台作業:可以通過終端啟動,但啟動后即轉入后台運行(釋放終端);
如何讓作業運行於后台?
(1) 運行中的作業
Ctrl+z
(2) 尚未啟動的作業
# COMMAND &
此類作業雖然被送往后台運行,但其依然與終端相關;如果希望送往后台后,剝離與終端的關系。也就是終端關閉,進程依然運行:
# nohup COMMAND &
查看所有作業:
# jobs ,這個命令輸出會顯示作業號
作業控制:
# fg % JOB_NUM:把指定的后台作業調回前台;
# bg % JOB_NUM:讓送往后台的作業在后台繼續運行;
# kill % JOB_NUM:終止指定的作業,這里的%不能省去
十二. 進程優先級調整:
靜態優先級:100-139,數字越小,優先級越高
進程默認啟動時的nice值為0,優先級為120,nice值的范圍是(-20,19)
nice命令:啟動進程時,以指定優先級運行
nice [OPTION] [COMMAND [ARG]...],例如:nice -n 5 htop
renice命令:對已處於運行態的進程,調整優先級
renice [-n] priority pid...,例如: renice -n 2 3618
查看:
ps axo pid,comm,ni
