day15-进程管理

1. 概述

  • 运行起来的软件就是进程,在内存中运行
  • 守护进程/服务:一直运行的进程

2. 僵尸进程

2.1. 僵尸进程zombie

当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程

  • 查看系统是否有僵尸进程
ps aux | awk '$8~/Z/'

2.2. 模拟僵尸进程

# 编译
gcc zombie.c -o zombie

# 后台运行
./zombie &

2.3. 结束僵尸进程

1.过滤查找僵尸进程的pid
ps aux | awk '$8~/Z/'

2.查找僵尸进程的父进程pid
pstree -p

3.kill终止僵尸的父进程进程
kill pid

3. 孤儿进程

对系统影响不大

某个子进程的父进程,因为特殊原因退出了,但子进程还在,子进程就是孤儿进程

解决:重启服务

4. 进程管理

4.1. kill三剑客

杀死进程

说明

kill pid

pid进程号结束对应进程

kill -9 pid

发送强制结束进程信号

kill -l

列出信号

pkill 进程名

根据进程名字过滤结束进程,容易误杀

killall

根据进程名字,用户结束进程

4.2. 后台运行

  • 前台运行:命令在运行时,无法运行其他命令,需要等待,连接断了或网络断了,前台运行的命令会结束
  • 后台运行:命令运行时不影响前台命令行

  1. &后台运行,当前shell连接中断后,后台运行的命令也结束了
# 在命令的结尾加上 & 符号
ping jd.com > ping.txt &
注意:当前shell连接中断后,后台运行的命令也结束了
  1. nohup后台运行,当前shell连接中断后,后台运行的命令正常运行
# 在命令前加上nohup命令
nohup ping jd.com &
注意:命令输出的内容会写入到当前目录的nohup.out文件中

# 后台运行,指定输出文件
nohup ping jd.com > /tmp/nohup.log &

4.3. screen

# 安装screen软件
yum -y install screen

# 创建screen名字的会话窗口
screen -S name
-S参数表示创建的会话名字

# screen -ls 可以查看系统当前有的screen
screen -ls
There is a screen on:
        3823.zbl        (Detached)
1 Socket in /run/screen/S-root.

# screen -r 可以恢复之前的session
screen -r 3823.zbl

ctrl+a 松手 敲个d,临时分离会话,但是会话不会中断

screen -x 可以让多个人一起共享一个session

4.4. tmux

4.4.1. 基本使用操作
tmux能达到screen的效果,而且比screen更加华丽
1.安装tmux软件
yum -y install tmux

2.启动tmux
tmux new -s zbl #创建出一个名字叫做zbl的session

3.再创建一个新的窗口
按ctrl+b 组合键,然后松开再按c键

4.切换窗口
按ctrl+b 组合键,然后松开再按0键

5.退出窗口
按ctrl+b 组合键,然后松开再按d 临时退出这个session

6.查看当前所有的tmux会话
tmux ls

7.回去原来的会话
tmux attach -t name

# 窗格操作
tmux所有的快捷键都是以"ctrl+b"开头
" 上下分割屏幕
% 左右分割屏幕
x 关闭当前窗格
{ 当前窗格前移
} 当前窗格后移
;选择上次使用的窗格
o 选择下一个窗格,也可以使用上下左右方向键来选择
space 切换窗格布局,tmux内置了五种窗格布局
z 最大化当前窗格,再次执行可恢复原来大小
q 显示所有窗格的序号,在序号出现期间按下对应的数字,即可跳转到对应的窗格

# 窗口操作
tmux所有的快捷键都是以ctrl+b开头
c 新建窗口,此时当前窗口会切换到新窗口,不影响原有窗口的状态
p 切换到上一个窗口
n 切换到下一个窗口
w 窗口列表选择,MacOS下使用^p和^n进行上下选择
& 关闭当前窗口
, 重命名窗口,可以使用中文,重命名后能在tmux状态栏更快速的识别窗口id
0 切换到0号窗口,使用其他数字id切换到对应窗口
f 根据窗口名搜索选择窗口,可模糊匹配
#如何在多个会话之间切换呢?
ctrl+b 然后↑↓←→去切换光标所在位置

# 配置 ssh 登录时默认使用 tmux
1.在服务器上安装 tmux。
2.编辑服务器上当前用户的.bashrc文件
3.在文件末尾添加以下内容
if [ "$SSH_CONNECTION" != "" ] && [ -z "$TMUX" ]; then
    tmux attach-session || tmux new-session
fi

4.保存并退出文件

现在,每当您通过 ssh 连接到服务器时, tmux 会自动启动/附加到已经存在的会话中或者创建一个新会话
4.4.2. 窗格操作

5. 进程状态

Z zombie 僵尸进程
R running 运行中的进程
S sleeping 没有运行,等待着,睡眠的进程
D 不可中断进程,一般指的io(input/output速写)进程
T 后台挂起(暂停)的进程(ctrl +z),fg回到前台运行

#辅助符号
+ 前台运行的进程
Ss 带有小s的表示:主进程(管理进程)
Ssl 带有小l的表示:进程支持线程,进程负责占资源,线程负责使用资源

#常见组合
R+   前台运行中
S+   前台运行中,没占用cpu
Ss   主进程(管理进程)
Ssl  进程支持线程
Z    僵尸进程

6. 进程监控命令

6.1. ps命令

命令使用参数介绍:

  • a: 显示所有用户的进程,包括其他用户的进程。
  • u: 以用户为基础显示详细信息,包括用户名、进程ID、CPU利用率、内存使用等。
  • x: 显示没有控制终端的进程。
  • -e:显示所有进程,而不仅限于当前用户。
  • -f:显示完整的进程信息,包括父进程ID、CPU使用情况等

查看cpu使用排名

ps aux --sort=-%cpu

6.2. top

%Cpu(s):  0.0 us,  0.1 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.1 si,  0.0 st
0.0 ni  高优先级进程占用cpu
0.0 hi  hard 硬件中断
0.1 si  soft 软件中断
0.0 st  steal 被偷的时间,被抢占的时间使用率(虚拟化有关),虚拟机的cup被宿主机或虚拟机偷了

6.3. ps与top的区别

top
  • 动态实时监控工具:持续更新显示系统中运行的进程状态。
  • 提供 CPU、内存等系统资源的整体使用情况。
  • 支持交互式操作(比如排序、筛选、杀死进程等)。
ps aux
  • 静态快照命令:只输出当前时刻所有进程的一个快照。
  • 更适合用于脚本处理或一次性查看进程信息。
  • 不提供实时更新功能。

主要区别对比表

特性

top

ps aux

是否实时更新

✅ 实时刷新(默认每秒一次)

❌ 只显示一次当前快照

是否支持交互

✅ 支持按键操作(如排序、搜索、杀进程)

❌ 不支持交互

输出格式

美化后的动态界面

简洁的文本格式,适合脚本解析

默认排序方式

按 CPU 使用率排序

按 PID 升序排列

显示内容

包括系统整体负载、CPU/内存使用等

仅显示进程列表及详细字段

资源消耗

相对更高(因为持续刷新)

更低,执行完即退出


常见用途对比

使用 top 的场景:
  • 实时监控服务器负载或性能瓶颈
  • 查看哪个进程占用 CPU 或内存过高
  • 动态观察进程变化
  • 快捷键操作(如按 P 排 CPU,按 M 排内存)
使用 ps aux 的场景:
  • 在脚本中提取特定进程的信息(例如结合 grep
  • 快速获取某个时间点的进程快照
  • 日志记录、调试分析等静态数据采集

6.4. top快捷键

M 内存使用率排序
P cpu使用率排序
空格 立刻更新(默认3S更新一次)
1 显示所有核心的cpu使用情况

先按z 显示颜色 然后按x 然后按 > 或 <

htop 高级的top

7. ps,top应用案例

7.1. 过滤出crond的进程或sshd进程

ps -ef | egrep 'crond|sshd'

7.2. 过滤rsyslog的进程pid

ps -ef | grep 'rsyslog' | grep -v grep | awk '{print $2}'

7.3. 取出系统登录用户数量

top -bn1 | awk 'NR==1' | awk '{print $8}'

#awk的条件和动作合并写一起
top -bn1 | awk 'NR==1 {print $8}'

7.4. 取出僵尸进程数

top -bn1
-b  静止模式
n1  输出一次

top -bn1 | awk 'NR==2 {print $(NF-1)}'

8. 系统负载

衡量系统繁忙程度指标

处于可运行(R,S)状态,不可中断进程(D io)数量

负载高:负载值接近或超过CPU核心总数

8.1. 模拟系统负载高

  • stress压力测试
#安装stress
yum -y install stress

#模拟CUP导致的高负载高
stress --cpu 10 --timeout 1000

#模拟IO导致的系统负载高
stress --io 4 --hdd 4 --hdd-bytes 1g --timeout 10000s

8.2. 排查流程

1.检查是否高

2.定位cpu,io

3.定位具体进程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值