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值;