2 linux系统管理之进程管理
2.1 进程
名称 | 含义 | |
---|---|---|
程序 | 安装包,程序代码,app,存放在磁盘上 | |
进程 | 运行起来的服务、程序、命令等,运行在内存中的 | |
守护进程 | 一直运行的进程,也叫服务 |
2.2 进程的分类(异常进程)
1)僵尸进程⭐️⭐️⭐️
解析:当子进程比父进程先结束,而父进程还没来得及回收子进程的资源,释放它的资源,这个子进程就叫僵尸进程
-
进程因某些原因挂了,但进程任然存在系统中占用着资源,就叫僵尸进程
-
查找僵尸进程
- ps aux过滤 Z状态进程
- top命令查看僵尸进程的数量
-
解决方法
- 找出僵尸进程的父进程,终止它
- 如果僵尸进程的父进程是主进程(PID 0),需要重启linux系统
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RTSh5n3v-1671277043376)(E:\学习\老男孩云计算linux-85期培训\image\linux系统管理之软件包管理\image-20221216155753408.png)]
2)孤儿进程
- 解析:其父进程执行完成或被中止后任然运行的进程
- 孤儿进程会被主进程(system)直接接管
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bZfvBd2g-1671277043377)(E:\学习\老男孩云计算linux-85期培训\image\linux系统管理之软件包管理\image-20221216155841894.png)]
3)模拟僵尸进程
- 通过gcc生成僵尸进程
1 生产僵尸进程文件
[root@hecs-225798 ~]# gcc zombine.c -o zombine
[root@hecs-225798 ~]# ll
total 16
-rwxr-xr-x 1 root root 8608 Dec 16 20:04 zombine
-rw-r--r-- 1 root root 591 Dec 16 19:59 zombine.c
2 执行僵尸进程
[root@hecs-225798 ~]# ./zombine
I am parent,26555
sleep....
I am child,26556
Child exits
3 top查看僵尸进程数量
Tasks: 75 total, 1 running, 73 sleeping, 0 stopped, 1 zombie
4 ps过滤Z状态进程
[root@hecs-225798 ~]# ps aux|grep Z
root 26556 0.0 0.0 0 0 pts/0 Z+ 20:04 0:00 [zombine] <defunct>
root 26604 0.0 0.0 112812 960 pts/1 R+ 20:07 0:00 grep --color=auto Z
5 pstree -p查看僵尸进程的父进程的PID
[root@hecs-225798 ~]# pstree -p
systemd(1)─┬─NetworkManager(524)─┬─dhclient(605)
│ ├─{NetworkManager}(570)
│ └─{NetworkManager}(573)
...省略...
├─sshd(1726)─┬─sshd(26447)───bash(26458)───zombine(26555)───zombine(26556)
6 直接终止僵尸进程
kill 26556
失败,无法终止
7 终止僵尸进程的父进程
kill 26555
[root@hecs-225798 ~]# ./zombine
I am parent,26555
sleep....
I am child,26556
Child exits
Terminated
成功!
2.3 进程监控指令
- linux常见的进程监控命令
监控命令 | 说明 | |
---|---|---|
ps | 静态:ps查看当前瞬间进程状态,一般用于临时检查或取值 | |
top | 动态:top动态,交互,整体查看系统状态,负载,僵尸进程,cpu,内存. 类似于windows任务管理器 |
1)ps命令格式
a)概述
- ps -ef
- UID 进程属于哪个用户
- PID 进程id
- PPID 父进程id
- CMD 进程名字
- ps aux
- 比-ef多了一些,cpu使用率,内存使用率,占用内存大小,进程状态
b)ps aux命令输出详解⭐️⭐️⭐️
列名 | 说明 | |
---|---|---|
User | 进程属于用户 | |
PID | 进程号(子进程号) | |
%CPU | cpu使用率. | |
%MEM | 内存使用率 | |
VSZ | 进程占用虚拟内存大小 (KB) | |
RSS | 进程占用物理内存大小 (KB) | |
TTY | 用户使用终端(用户连接进来后,系统创建) | |
STAT | 进程状态 | |
START | 进程启动时间. | |
TIME | 进程占用CPU时间. | |
COMMAND | 进程名字(命令,选项 .) []括起来的是内核进程(无法终止), 其他是系统进程 systemd是第1个进程. |
c)进程状态⭐️⭐️⭐️
- 进程状态:运行的进程、僵尸进程、io进程、前台与后台进程
- 进程状态=基本状态+附加状态
STAT基本状态 | 说明 | |
---|---|---|
R(running) | 运行中的进程(后台) | |
S | 可中断进程(可以随时停止) | |
T | 挂起/暂停的进程 | |
D | 不可中断的进程(正在io读取) | |
Z | 僵尸进程 |
STAT附加状态(了解) | 描述 | |
---|---|---|
s | 控制进程, Ss进程的领导者,父进程/主进程 | |
< | 进程运行在高优先级上,S<优先级较高的进程 | |
N | 进程运行在低优先级上,SN优先级较低的进程 | |
+ | 当前进程运行在前台,R+该表示进程在前台运行 | |
l | 进程是多线程的,Sl表示进程是以线程方式运行 |
- 常见的进程状态
- R+ 前台运行中进程
- R 后台运行进程
- S 可中断进程
- T 后台挂起的进程
- D 不可中断进程
- S< 可中断的高优先级进程
- Ss 可中断管理进程
- Z 僵尸进程
- Ssl 可中断的多线程的管理进程
2)top命令格式
- top命令默认是个交互式的命令,可以展示系统负载信息,进程信息,cpu,内存信息。
3)进程管理案例
a)过滤进程
[root@hecs-225798 ~]# ps -ef|grep crond
root 1731 1 0 09:54 ? 00:00:00 /usr/sbin/crond -n
root 27740 27588 0 21:41 pts/0 00:00:00 grep --color=auto crond
排查grep自身进程
[root@hecs-225798 ~]# ps -ef|grep crond |grep -v grep
root 1731 1 0 09:54 ? 00:00:00 /usr/sbin/crond -n
b)树形查看进程
pstree
pstree -p 树形查看进程,并显示pid
c)配合awk取出指定值
取出第一列的值
ps aux | awk '{print $1}'
取出第一和第三列的值
ps aux | awk '{print $1,$3}'
不显示第一行标题
pa aux|awk 'NR>1{print $1}'
NR>1 行号大于1的行
输出指定列的内容
ps axo user,pid,ppid,command
👉 ps axo指定列显示,参数是标题的小写字母
d)ps自带选项过滤进程
[root@hecs-225798 ~]# ps --no-heading -o pid,%cpu,%mem,command -C crond
1731 0.0 0.0 /usr/sbin/crond -n
--no-heading 不显示标题
-C 过滤,注意不要加上ax选项
-o 指定列输出
e)top基础使用和快捷键
#基础必会用法 q 退出
默认3秒刷新1次, 空格立刻刷新.
P 默认按照CPU使用率排序
M 按照内存使用率排序
#进阶用法:
top输入z进入颜色模式
按 x 标记出当前是按照哪列排序.
<- 向左 方向键 --> 向右
#top命令升级版,支持鼠标操作 htop
d)ps自带选项过滤进程
[root@hecs-225798 ~]# ps --no-heading -o pid,%cpu,%mem,command -C crond
1731 0.0 0.0 /usr/sbin/crond -n
--no-heading 不显示标题
-C 过滤,注意不要加上ax选项
-o 指定列输出
e)top基础使用和快捷键
#基础必会用法 q 退出
默认3秒刷新1次, 空格立刻刷新.
P 默认按照CPU使用率排序
M 按照内存使用率排序
#进阶用法:
top输入z进入颜色模式
按 x 标记出当前是按照哪列排序.
<- 向左 方向键 --> 向右
#top命令升级版,支持鼠标操作 htop
f)非交互模式
- 未来想获取top命令的结果,指标,需要让top运行在非交互模式
top -bn1 |awk 'NR =2'
-b 非交互模式
-n1 只输出1次结果.