进程的基本状态:创建、就绪、执行、阻塞、终止
状态之间的六种转换:运行→就绪,就绪→运行,运行→阻塞,阻塞→就绪,阻塞→运行,就绪→阻塞
进程优先级:
系统优先级:数字越小,优先级越高
0-139(centos4,5)
0-98,99(centos6)
实时优先级:99-0值最大优先级越高
nice值:-20到19,对应系统优先级100-139或99
查看优先级
ps axo nice\pri\psr\reprio
更改nice优先级
renice -n # 进程号
linux系统状态的查看及管理工具:
pstree -p 显示进程树
vmstat # # 管理虚拟内存信息
procs r 可运行进程的个数
b 被阻塞的队列的长度
iostat # # 统计CPU和设备IO信息
pmap pid 进程对应的内存映射
-x 详细格式
glance 远程监控进程
dstat # # 统计CPU和设备IO信息,取代iostat
iotop 监视磁盘I/O使用状况
pidof xx(进程名) 查看pid
PS命令:(常用ps aux)
ps 显示当前终端进程
a 所有终端进程
x 显示与终端无关的进程
u 进程所有者的信息
f 进程树
k 指定属性排序pid,cmd,%cpu,%men
o 显示定制信息pid,cmd,%cpu,%men
L 显示支持的属性列表
输出信息说明:
VSZ RSS TTY STAT
承诺分 实际 终端 进程状态
配内存 内存 编号
STAT分类:
R: running
S:可打断休眠
D:不可打断休眠
T:暂停状态
Z:僵尸状态
+:前台进程
l:多线程进程
L:内存分页并带锁
N:低优先级进程
<:高优先级进程
s:子进程
搜索进程
pgrep命令:支持正则表达式
pgrep -u uid 生效者
-U uid 发起者
-t 与终端相关的进程
-l 显示进程名
-a 显示完整格式的进程名
-P pid 显示指定进程的子进程
指定进程的ID
top命令:默认CPU排序
top -b 显示所有进程
-n # 刷下多少次后退出
-d # 指定刷新间隔时间
shift+p,以CPU排序
shift+m,以内存排序
shift+t,以占用时长排序
l,首部信息显示,uptime内容
t,tasks及cpu信息(Task:total进程数,running、sleeping、stopped、zombie进程状态)
(CPU:us用户占用,sy系统占用,id空闲,hi硬中断,si软中断,st虚拟机占用)
1(数字),cpu分别显示
m,memory信息
q退出 s修改刷新间隔 k终止指定进程 shift+w保存文件
htop命令:
htop -d # 指定延迟时间
-u 用户名 仅显示指定用户的进程
-s 以指定字段进行排序
s,跟踪选定进程的系统调用
l,显示选定进程打开的文件列表
a,将选定的进程绑定至某指定CPU核心
t,显示进程树
free命令:
free 显示内存空间使用状态
-b 以字节为单位
-m 以MB为单位
-g 以GB为单位
-h 易读格式
-o 不显示buffers/cache
-t 显示RAM+swap总和
-s # 刷新间隔为#秒
-c # 刷新#次后退出
kill命令:
kill -l,trap -l 显示当前系统可用信号
kill -# pid\name (默认发15信号)
killall pid\name
常用信号:
1-SIGHUP,无须关闭进程而让其重读配置文件
2-SIGINT,中止正在运行的进程,等于Ctrl+c
3-SIGOUIT,相当于Ctrl+\
9-SIGKILL,强制杀死正在运行的进程
15-SIGTERM,终止正在运行的进程
18-SIGCONT,继续运行
19-SIGSTOP,后台休眠
pkill -u uid 生效者
-U uid 发起者
-t xxx 指定终端相关的进程
-l 显示进程名
-a 显示完整格式的进程名
-P pid 显示指定进程的子进程
进程前后台管理
前台进程:通过终端启动,且启动后一直占据终端
后台进程:可通过终端启动,但启动后即转入后台运行
让进程运行于后台
1)运行中的进程: Ctrl+z
2)尚未启动的进程: COMMAND &
后台进程虽然被送往后台运行,但其依然与终端相关;退出终端,将关闭后台进程。如果希望送往后台后,剥离与终端的关系
nohup COMMAND &> /dev/null &
screen;COMMAND (恢复:screen -r)
查看当前终端所有进程:jobs
进程控制:
fg[JOB_NUM]:把指定的后台进程调回前台
bg[JOB_NUM]:让送往后台的进程后台继续运行
kill[%JOB_NUM]:终止指定的进程
并行运行
同时运行多个进程,提高效率
方法1:把多个进程写在脚本里,再执行脚本
方法2:
(f1.sh&);(f2.sh&);(f3.sh&)
方法3:
{ f1.sh& f2.sh& f3.sh& }