进程管理与系统监控:ps、top、kill、df、du、free
进程概念
进程(Process)是程序的一次执行实例。Linux 中每个进程都有唯一的 PID(Process ID)。
ps:查看进程快照
ps(Process Status)显示当前终端的进程快照。
# 基础用法(当前终端的进程)
ps
# 显示所有用户的所有进程(最常用)
ps aux
# 标准格式显示所有进程
ps -ef
# 查找特定进程(配合 grep)
ps aux | grep nginx
# 显示进程树
ps auxf
ps aux 输出解读
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 185436 6124 ? Ss Jan14 0:03 /sbin/init
user 1234 0.1 0.5 512340 20480 pts/0 S+ 10:00 0:02 vim file.txt
| 字段 | 含义 | 说明 |
|---|---|---|
| USER | 进程所有者 | 启动进程的用户 |
| PID | 进程 ID | 唯一标识符 |
| %CPU | CPU 使用率 | 占一个 CPU 核心的百分比 |
| %MEM | 内存使用率 | 占物理内存的百分比 |
| VSZ | 虚拟内存 | 进程申请的虚拟内存大小(KB) |
| RSS | 常驻内存 | 实际占用的物理内存(KB) |
| TTY | 终端 | ? 表示后台进程 |
| STAT | 状态 | R=运行, S=睡眠, Z=僵尸 |
| START | 启动时间 | 进程启动的时间 |
| TIME | CPU 时间 | 累计使用的 CPU 时间 |
| COMMAND | 命令 | 启动进程的命令 |
进程状态 STAT
| 状态 | 含义 |
|---|---|
| R | Running(运行中) |
| S | Sleeping(睡眠中,可中断) |
| D | Disk Sleep(不可中断睡眠,通常 IO 操作) |
| Z | Zombie(僵尸进程,已终止但父进程未回收) |
| T | Stopped(被信号停止) |
| s | 会话领导者 |
| + | 前台进程 |
top:实时系统监控
top 实时显示系统资源使用情况和进程列表,是排查性能问题的首选工具。
top
# 按 CPU 使用率排序(默认)
# 按 M 切换为内存排序
# 按 P 切换回 CPU 排序
# 按 k 输入 PID 终止进程
# 按 q 退出
top 界面解读
top - 10:30:00 up 5 days, 2:15, 1 user, load average: 0.52, 0.58, 0.60
Tasks: 235 total, 1 running, 234 sleeping, 0 stopped, 0 zombie
%Cpu(s): 5.2 us, 2.1 sy, 0.0 ni, 92.1 id, 0.3 wa, 0.0 hi, 0.3 si
MiB Mem : 7822.4 total, 1234.5 free, 4567.8 used, 2020.1 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used
| 行 | 含义 |
|---|---|
| 第 1 行 | 系统时间、运行时长、用户数、1/5/15 分钟负载 |
| 第 2 行 | 总进程数、运行中、睡眠中、停止、僵尸 |
| 第 3 行 | CPU 使用率:us=用户态, sy=内核态, id=空闲, wa=等待 IO |
| 第 4 行 | 内存总量、空闲、已用、缓存 |
| 第 5 行 | 交换空间总量、空闲、已用 |
负载(load average):1/5/15 分钟内,处于运行或不可中断状态的平均进程数。单核 CPU 上,1.0 表示满负荷。
kill:终止进程
kill 向进程发送信号,默认发送 SIGTERM(终止信号)。
# 查看所有信号
kill -l
# 温和终止(默认 SIGTERM,信号 15)
kill 1234
# 强制终止(SIGKILL,信号 9,无法被捕获)
kill -9 1234
# 按名称终止所有匹配进程
killall firefox
killall -9 nginx
常用信号
| 信号 | 数值 | 名称 | 作用 |
|---|---|---|---|
| 1 | SIGHUP | 挂起 | 终端断开时发送,常用于重载配置 |
| 9 | SIGKILL | 强制终止 | 立即终止,无法被捕获或忽略 |
| 15 | SIGTERM | 终止 | 请求终止,进程可以清理资源后退出 |
| 18 | SIGCONT | 继续 | 恢复被停止的进程 |
| 19 | SIGSTOP | 停止 | 暂停进程(不可被捕获) |
df:查看磁盘空间
df(Disk Free)显示文件系统的磁盘空间使用情况。
# 基础用法(字节,难读)
df
# 人类可读(最常用)
df -h
# 显示文件系统类型
df -Th
# 只看本地文件系统
df -hl
df -h 输出示例
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 98G 45G 48G 49% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
/dev/sdb1 458G 120G 315G 28% /data
| 字段 | 含义 |
|---|---|
| Filesystem | 文件系统设备 |
| Size | 总容量 |
| Used | 已用空间 |
| Avail | 可用空间 |
| Use% | 使用百分比 |
| Mounted on | 挂载点 |
du:查看目录大小
du(Disk Usage)显示目录或文件的磁盘使用量。
# 显示当前目录下所有子目录大小(字节,递归)
du
# 人类可读(最常用)
du -h
# 只显示当前目录总大小
du -sh
# 显示当前目录下每个子目录的大小(排查大文件神器)
du -sh *
# 显示指定目录大小
du -sh /var/log
# 限制目录深度
du -h --max-depth=1
排查磁盘占用的经典组合:
# 找出当前目录下最大的 10 个目录
du -sh * | sort -rh | head -n 10
free:查看内存使用
free 显示系统内存和交换空间的使用情况。
# 基础用法(KB)
free
# 人类可读(最常用)
free -h
# 显示详细信息(含缓存)
free -m
free -h 输出解读
total used free shared buff/cache available
Mem: 7.6Gi 4.2Gi 1.1Gi 256Mi 2.3Gi 2.8Gi
Swap: 2.0Gi 0B 2.0Gi
| 字段 | 含义 |
|---|---|
| total | 总内存 |
| used | 已用内存(含缓存) |
| free | 完全空闲 |
| shared | 共享内存 |
| buff/cache | 缓存和缓冲区 |
| available | 可用内存(含可回收缓存) |
注意:used 高不一定内存不足,Linux 会把空闲内存用于缓存。看 available 更准确。
本篇小结
ps aux:查看所有进程快照,关注 PID、%CPU、%MEM、STATtop:实时监控系统资源,关注 load average、CPU、内存、IO waitkill:发送信号终止进程,kill -9是强制终止的最后手段df -h:查看文件系统磁盘空间,关注 Use%du -sh:查看目录大小,du -sh * | sort -rh | head排查大文件free -h:查看内存使用,关注 available 而非 used
动手实践
查看当前所有进程:
ps aux ps aux | grep bash运行
top,观察:- 按
M切换到内存排序 - 按
P切换回 CPU 排序 - 按
k输入 PID 终止一个进程(谨慎操作) - 按
q退出
- 按
查看磁盘空间:
df -h du -sh ~ du -sh ~/* | sort -rh | head -n 5查看内存使用:
free -h启动一个后台进程并终止它:
sleep 300 & # 后台运行 300 秒 ps aux | grep sleep # 找到 PID kill -15 <PID> # 温和终止思考:为什么
kill -9是"最后手段"?如果进程正在写入文件,强制终止会导致什么问题?