讲解
进程就是正在运行的程序实例,每个进程有唯一的 PID(进程号)、父进程 PPID、所属用户、占用的 CPU 和内存。想知道系统里正在跑什么,用 ps。最常用的形态是 ps aux:a 显示所有用户的进程,u 以用户友好格式显示,x 包括没有终端的后台进程。输出列里重点看:USER(谁起的)、PID(进程号)、%CPU、%MEM、STAT(状态,R 运行 S 睡眠 Z 僵尸)、COMMAND(命令行)。
ps aux 输出动辄几百行,实战中的标准用法是配合 grep 定位目标:ps aux | grep nginx。有个经典小技巧:写成 grep "[n]ginx" 可以让 grep 进程自己不匹配——因为 [n]ginx 这个字面模式不会匹配字符串 [n]ginx 本身。另外 pgrep 进程名 可以直接按名字找 PID,比 ps | grep 更干净。
想看实时刷新的资源占用,用 top:按 CPU 排序的进程仪表板,按 M 改按内存排序,按 q 退出。macOS 的 top 默认排序和按键与 Linux 略有不同,可以加 -o cpu 指定。更好看的替代品是 htop(需安装),有颜色、支持鼠标和直接杀进程。日常节奏是:感觉机器卡了 → top 看谁在吃资源 → ps aux | grep 看它的完整命令行。
示例
# 查看进程列表(这里只看前几行表头和内容)
ps aux | sed -n '1,8p'
# 启动两个演示进程,然后找到它们
sleep 300 &
sleep 300 &
# jobs 列出当前会话的后台任务(-l 显示 PID)
jobs -l
# pgrep -x 按精确的进程名找 PID
pgrep -x sleep
# 演示完毕,清理这两个进程
kill %1 %2
交互式的资源监控在真实终端里运行:
# 仅示意:实时进程仪表板(按 M 按内存排序,q 退出)
top
# 仅示意:更好看的替代品(需要安装)
htop
常见坑
- grep 自己出现在结果里:ps aux | grep sleep 会把 grep sleep 这个进程也列出来,用 [s]leep 写法或 pgrep 避开。
- %CPU 超过 100% 以为显示错误:多核机器上单进程可以吃满多个核,100% 代表一个核。
- 把 VSZ 当成内存占用:VSZ 是虚拟地址空间(虚的),RSS 才是实际占用的物理内存。
- 看到 Z 状态进程想杀掉:僵尸进程已经死了,占的只是一个进程表条目,杀不掉;要解决得处理它的父进程。
小结
ps aux 看进程快照、pgrep 按名找 PID、top/htop 实时看资源。下一节学习如何结束进程:kill 与信号。