六、管理Linux系统中的进程
6.1 进程理解
6.1.1 进程
- 程序是静态文件
- 进程时运行中的程序的一个副本
- 进程存在生命周期(准备,运行,终止)
6.1.2 进程状态
状态 |
定义 |
R(TASK_RUNNING |
可执行状态(RUNNING,REDAY |
S(TASK_INTERRUPTIBLE) |
可唤醒睡眠状态 |
D(TASK_UNINTERRUPTABLE) |
不可唤醒睡眠状态 |
T(TASK_STOPPED) |
暂停状态 |
Z(EXIT_ZOMBLE) |
僵死态 |
6.2 进程查看
6.2.1 查看进程树(pstree)
[root@localhost Desktop]$ pstree
6.2.2 显示当前命令执行时进程状态(ps)
命令 |
效果 |
ps a |
显示与终端相关进程(BSD) |
ps x |
显示所有与终端无关进程(BSD) |
ps u |
以用户为归类来显示进程状态信息(BSD) |
ps f |
层级结构显示进程信息 |
ps o |
指定查看选项 pid comm.nice,pri,pcpu,stat,ppid |
ps -e |
显示所有进程(unix) |
ps -f |
显示完整格式信息(unix) |
ps -H |
层级结构显示进程的相关信息 |
ps -o |
指定查看选项,pid comm,nice ,%cpu,%mem |
[root@localhost Desktop]$ ps auf
[root@localhost Desktop]$ ps -eo pid,comm,nice,%cpu
字段 |
解释 |
USER |
用户名称 |
PID |
进程id |
%CPU |
CPU用量百分比 |
%MEM |
内存用量百分比 |
VSZ |
占用虚拟内存大小 |
RSS |
常驻内存集大小 |
TTY |
字符终端 |
STAT |
进程状态 |
START |
运行时间 |
TIME |
占用CPU时间 |
COMMAND |
进程名称 |
6.2.2 显示指定信息进程(pgrep)
命令 |
效果 |
pgrep -u + ‘uid’ |
显示指定用户进程 |
pgrep -U+‘name’ |
显示指定用户进程 |
pgrep -t+‘tty’ |
显示指定终端进程 |
pgrep -l |
显示进程名称 |
pgrep -a |
显示完整格式进程名 |
pgrep -P+ ‘pid’ |
显示指定进程的子进程 |
[root@localhost Desktop]$ pgrep -u 1000
[root@localhost Desktop]$ pgrep -U student
[root@localhost Desktop]$ pgrep -t pts/0
[root@localhost Desktop]$ pgrep -lu 1000
[root@localhost Desktop]$ pgrep -aU student
[root@localhost Desktop]$ pgrep -P 0 显示0进程的子进程
6.2.3 根据进程名称获取pid (pidof)
pidof +进程名称 可以获取进程pid
[root@localhost Desktop]$ pidof vim
6.2.4 显示进程信息(top)
[root@localhost Desktop]$ top
参数 |
效果 |
P |
cpu百分比进行排序 |
M |
内存百分比排序 |
T |
累计占用CPU时间排序 |
l |
开启/关闭uptime信息 |
t |
开启/关闭task&cpu信息 |
s |
调整刷新频率(默认3S) |
k |
终止进程 |
u |
查看指定用户进程 |
q |
退出top |
d |
改变刷新时间 |
[root@localhost Desktop]$ top -d 5
[root@localhost Desktop]$ top -b
[root@localhost Desktop]$ top -n 10
命令 |
效果 |
top -d+‘时间’ |
指定刷新间隔 |
top -b |
一批次方式显示 |
top -n +‘数量’ |
显示批次数量 |
top |
系统当前时间 |
up |
系统运行时间 |
user |
登陆当前系统的用户数量 |
load average |
平均负载1分钟5分钟15分钟的队列长度(uptime) |
task |
任务 |
%cpu |
cpu占用百分比 |
mem |
物理内存 |
swap |
交换分区占用 |
us |
用户空间 |
sy |
内核空间 |
ni |
nice调整空间 |
id |
空闲时间 |
wa |
等待 io |
hi |
处理硬件中断 |
si |
处理软件中断 |
st |
被虚拟化程序占用的百分比 |
6.3 进程优先级
6.3.1 按照资源占用划分进程的类型
资源使用量 |
进程类型 |
cpu使用密集 |
CPU-Bound |
I/O使用密集 |
I/O-Bound |
6.3.2 优先级范围
- 对Linux而言优先级被划分成固定个数(0-139)
- 1-99为实时有优先级,数字越大优先级越高,不用手动处理系统自用
- 100-139为静态优先级,数字越小优先级越高
6.3.3 NICE 值
- NICE值:-20~19对用静态优先级
- 普通用户只可以调低优先级,超级用户任意调整
- 优先级命令
[root@localhost Desktop]$ ps ax -o nice,pid,comm
[root@localhost Desktop]$ nice -n 5 vim file
[root@localhost Desktop]$ renice -n 10 2988
6.4 进程前后台调用
指令 |
含义 |
jobs |
查看后台任务 |
ctrl+Z |
将前台运行进程打入后台 |
bg |
激活后台进程 |
fg |
调回进程 |
& |
运行在后台 |
- 例子1 演示bg命令
- 例子2 演示fg命令
6.5 信号
[root@localhost Desktop]$ man 7 signal
可控信号 |
含义 |
1 |
刷新 |
2 |
中断键盘输入 |
3 |
退出键盘 |
9 |
强制结束 |
15 |
正常关闭 |
18 |
激活进程 |
19 |
强制暂停 |
20 |
正常暂停 |
- 信号指令
kill + '-信号‘ +pid
pkill+ ’ -信号‘ +name
killall +‘-信号’+name 批量处理
- 例子
[root@localhost Desktop]$ kill -9 2988
[root@localhost Desktop]$ killall -9 vim
6.6 系统守护进程
6.6.1 守护进程的定义
- 守护进程就是通常讲的Daemon进程
- 是linux后台执行的服务进程
- 是独立控制终端,周期性的执行某种任务或等待处理某些发生事件
- 不会随终端关闭而停止,直到接受停止信息才会结束
6.6.2 守护进程类型
守护进程类型 |
使用系统及特点 |
Sysv |
经典的守护进程类型延用到rhel6 |
upstart |
做到并行启动rhel6中应用 |
system |
独立完成启动,rhel7中使用 |
6.6.3 systemctl 用法
指令 |
用途 |
systemctl list-unit-files |
查看服务开机运行情况 |
systemctl list-units |
查看服务当前运行情况 |
systemctl list dependencies |
查看服务依赖性 |
systemctl status service |
查看服务状态 |
systemctl start service |
开启服务 |
systemctl stop service |
关闭服务 |
systemctl reload service |
重新加载服务配置 |
systemctl restart service |
重新启动服务 |
systemctl enable service |
设定服务开启启动 |
systemctl enable -now service |
设定服务开机启动并开始服务 |
systemctl disable service |
设定服务开机关闭 |
systemctl set-default multi-user.target |
设定系统年运行级别为无图形网络模式 |
systemctl set-default graphical.target |
设定系统运行级别为图形网络模式 |
- 例子1 查看状态
- 例子2 查看开启关闭的服务
- 例子3 查看当前运行状态
- 例子4 在运行中查找服务 /+服务名称
- 例子5关闭服务