進程管理工具的使用
Linux進程管理工具: pstree, ps, pidof, pgrep, top, htop, glance, pmap, vmstat, dstat, kill, job,
pstree: 顯示進程樹
-p: 顯示各進程的PID
ps: 顯示進程狀態的命令
Linux各進程的相關信息在/proc目錄有一個以其PID命令的目錄下的衆多文件中;
支持兩種使用風格:SysV, BSD
進程分類(根據進程是否通過終端啓動):
與終端相關的進程: a
與終端無關的進程: x
常用組合1:aux
u: 以用戶爲中心組織進程狀態信息顯示
VSZ: Virutal memory SiZe
RSS:常駐內存集
STAT:進程狀態
R:running
S:可中斷睡眠
D: 不可中斷睡眠
T:停止
Z:zombie
s: session leader
+: 前臺進程,frontground
l: 多線程進程
N: 低優先級進程
<: 高優先級進程
COMMAND:
[]: 內核線程
常用組合2:-ef
-e: 顯示所有進程
-f: 顯示完整格式的進程信息
常用組合3:-eFH
-F: 顯示額外信息
-H:顯示進程的層次結構
自定義要顯示的信息:axo FIELD
ps axo pid,command,psr,pri,ni
psr: 進程所運行在的CPU;
pri: 優先級, priority
ni: nice值
pgrep:
-U UID:僅顯示由指定運行的進程PID
-t term: 僅顯示指定的終端設備的進程PID
-l: 顯示進程PID的同時顯示進程名
用法:pgrep [OPTIONS] [PATTERN]
PATTERN: 支持正則表達元字符書寫模式實現進程過濾;
pidof: 根據進程名獲取其PID;
pidof PROGRAM
top:
P: CPU百分比
M:Memory佔用量
T:CPU累積時間佔用量
l: top行信息是否顯示;
load avg:
CPU上等待運行的進程隊列的隊列長度;
過去1分鐘、5分鐘、15分鐘的平均長度;
t:是否顯示進程及CPU相關的信息
1:是否單獨顯示每顆CPU的使用率
us: user space
sy: system
ni: nice
id: idle
wa: waiting io
hi: hardware interrupt
si: software interrupt
st: stolen
m: 是否顯示內存及swap相關的信息
q: 退出top
s: 修改刷新時間間隔;
k: 殺死指定進程
常用選項:
-d #: 指定刷新時間間隔;
-b: 以批次的顯示;
-n #: 顯示的批次;
htop:
選項:
-d #: 刷新時間間隔
-u USERNAME: 僅顯示指定用戶的進程
-s COLUMN: 以指定的字段進行排序
交互式命令:
u: 僅顯示指定用戶的進程
s: 跟蹤選定進程發起的系統調用
l: 跟蹤選定進程打開的文件
t: 顯示進程樹
a: 設定cpu親緣性(將選定的進程綁定在某CPU上)
vmstat:
procs:
r:等待運行的進程的個數;
b:處於不可中斷睡眠態的進程個數;(被阻塞的進程隊列的長度)
memory:
swpd: 虛擬內存使用的總量;
free: 空閒的物理內存總量;
buffer:用於buffer的內存總量;
cache: 用於cache的內存總量;
swap:
si: 數據進入swap中的速率(kb/s)
so: 數據離開swap中的速率(kb/s)
io:
bi: 從塊設備讀入數據到系統的速率
bo: 保存數據至塊設備的速率
system:
in: interrupts,中斷速率
cs: context switch, 上下文切換速率
選項:
-s: 顯示內存統計數據
回顧:進程管理基礎概念, 進程狀態查看工具
進程管理的基礎概念:進程調度、進程優先級;
資源分配基本單位:CPU、內存、IO
CPU:timeslice
內存:虛擬內存、分佈機制、MMU
IO:複用;
進程狀態查看:/proc/#
pstree, ps, pgrep, pidof
top, htop, vmstat
Linux進程狀態查看及管理(2)
pmap, glances, dstat, kill, job, bg, fg, nice, renice
pmap:查看指定進程內存映射關係
# pmap [OPTIONS] PID
-x: 顯示擴展信息
# cat /proc/PID/maps
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/somewhere: 設置輸出文件的位置及其格式;
-o {HTML|CSV}
-m: 禁用mount模塊
-n: 禁用網絡模塊
-t #: 指定刷新時間間隔
-1:每個CPU的數據單獨顯示
交互式命令:有許多交互式命令來定義glances的顯示信息,以及排序方式等;
h: 顯示幫助
C/S模式下運行glances命令:
服務模式:
glances -s -B IPADDR
IPADDR:自己監聽的本機地址
客戶端模式:
glances -c IPADDR
IPADDR: 遠程服務器監聽的地址
dstat: 支持插件
dstat [-afv] [options..] [delay [count]]
-c
-d
-g, --page
-i
-l
-m
-p
-r, --io
-s, --swap
-t, --time
-y, --sys
--aio: 顯示異步io統計數據
--ipc: ipc相關的信息
--raw: raw socket
--tcp: tcp socket
--udp: udp socket
--socket: raw, tcp, udp
--unix: unix sock
--top-cpu:顯示最佔用CPU的進程
--top-bio:顯示最佔用block IO的進程
--top-mem: 顯示最耗費內存的進程
--top-io:最佔用IO的進程
IPC: 進程間通信
message queue, semerphore, shared memory, signal
signal:傳遞給進程的微小信息
顯示可用信號:
kill -l
man 7 signal
向進程發信號:
kill [-SIGNAL] PID
SIGNAL:
(1) 信號的完整名稱,例如SIGHUP、SIGINT、SIGKILL、SIGTERM、SIGCONT、SIGSTOP
(2) 信號簡稱:HUP、KILL
(3) 信號數據標識:1,2, ...
SIGHUP:1, 讓進程重讀配置文件中的信息,而無須重啓進程;
SIGINT:2, interrupt,打斷正在運行中進程;相當於Ctrl+c
SIGKILL: 9, 強行中止正在運行的進程
SIGTERM:15, 優雅關閉正在運行的進程
SIGSTOP:19, 暫停進程
SIGCONT: 18,繼續暫停進程
killall [-SIGNAL] COMMAND
Linux作業控制:job
前臺作業: 通過終端啓動,並且在停止之前會一直佔據終端;
後臺作業:作業啓動之後在後臺運行;不通過啓動,或在終端啓動後直接轉入後臺運行;
如何讓作業運行於後臺?
1、運行中的作業:
Ctrl+z
注意:送往後臺後,作業處於stopped狀態;
2、尚未啓動的作業:
COMMAND &
此類作業依然屬於與終端相關的作業,因此,在終端結束時,其也會被終止;可以用下而的命令剝離其與終端的關係:
# nohup COMMAND &
查看作業:jobs
# jobs
作業控制命令:
# fg [[%]JOB_NUM]:把指定的作業調回前臺
# bg [[%]JOB_NUM]:控制指定的作業於後臺繼續運行
# kill [%JOB_NUM]: 中止指定的作業
進程優先級調整:nice, renice
靜態優先級:
100-139
nice: -20, 19
(1) 以指定的nice值啓動一個進程:
nice -n # COMMAND
(2) 調整運行中的進程的nice值:
renice -n # PID
注意:普通用戶僅有權限調大nice值;