ps 命令速查表 - Linux 进程管理常用命令大全
找不到进程、想知道谁吃内存、要拿一个 PID 交给 kill,排查第一步几乎总是 ps。表按基础查看、过滤进程、自定义输出、进程树、线程查看、常用场景六组组织,核心是分清 BSD 与 System V 两套语法:ps aux 显示用户、PID、CPU%、内存%、VSZ、RSS、TTY、状态与命令;ps -ef 用 -e 选全部进程、-f 输出完整格式,字段更少但兼容面更广。两者都能看到全部进程,但列的含义与排布不同,脚本里按需选一个即可,不要混着写参数。定位内存大户用 ps aux --sort=-%mem | head,注意 RSS 单位是 KB,别和 VSZ(虚拟内存,通常大得多)混淆——这是「进程占了几个 G」判断出错的主因。进程树一组看清父子关系,僵尸进程(状态 Z)无法 kill,必须处理其父进程或重启。
基础查看 Basic 6
ps查看当前终端的进程
ps aux查看所有进程(BSD 风格)
ps -ef查看所有进程(System V 风格)
ps -e查看所有进程
ps -f完整格式输出
ps -l长格式输出
过滤进程 Filter 7
ps -p 1234查看指定 PID 的进程
ps -p 1234,5678查看多个 PID
ps -u username查看指定用户的进程
ps -U username查看指定真实用户的进程
ps -g groupname查看指定组的进程
ps -C nginx按命令名查看进程
ps --ppid 1234查看指定父进程的子进程
自定义输出 Custom Format 7
ps -eo pid,comm,user自定义输出列
ps -eo pid,ppid,comm,%cpu,%mem查看 PID、父进程、命令、CPU 和内存
ps -eo pid,comm,etime查看进程运行时间
ps -eo pid,comm,stat查看进程状态
ps aux --sort=-%cpu按 CPU 使用率降序
ps aux --sort=%mem按内存使用率升序
ps aux --sort=-rss按实际内存降序
进程树 Process Tree 5
ps -ejH显示进程树(System V 风格)
ps axjf显示进程树(BSD 风格)
pstree显示进程树(需安装 psmisc)
pstree -p显示进程树并显示 PID
pstree -u显示进程树并显示用户
线程查看 Threads 4
ps -eLf显示所有线程
ps -p 1234 -L显示指定进程的线程
ps -eT显示线程 ID
ps -H -p 1234显示进程的线程层次
常用场景 Common Patterns 6
ps aux | grep nginx查找 nginx 进程
ps aux --sort=-%cpu | head查看 CPU 占用最高的进程
ps aux --sort=-%mem | head查看内存占用最高的进程
ps -ef | grep defunct查找僵尸进程
ps -eo pid,comm,etime | grep -v defunct查看非僵尸进程及运行时间
ps -u username -o pid,comm,%cpu,%mem查看指定用户的进程资源使用
命令示例
直接输出最耗 CPU 的 5 个进程
ps aux --sort=-%cpu | head -6--sort 支持 -key 降序、key 升序。管道接 head 就能拿到 Top N,不必进交互式 top。
输出
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 168404 12164 ? Ss Aug29 0:03 systemd tom 3120 48.2 8.1 1258300 318204 ? Sl 10:12 2:14 node
查看进程树,找出是谁拉起的
pstree -p $(pgrep -f "node server.js")pstree -p 显示 PID,能直观看出父进程是谁。排查「进程被谁启动的」「为什么杀了又起」这类问题时比 ps -ef 更直观。
输出
bash [1201] ├─ node [3120] │ └─ node [3121] └─ pm2 [1200]
按 CPU 列找出真正的资源大户
ps -eo pid,ppid,comm,%cpu,%mem --sort=-%cpu | head -10-eo 自定义列,输出干净可控;加 ppid 能看出进程父子关系。ps aux 里那串长路径和启动参数对排序没有帮助。
输出
PID PPID COMMAND %CPU %MEM 3120 1200 node 48.2 8.1 1452 840 chrome 18.2 12.4 2031 1200 electron 12.7 6.8
常见坑与注意事项
- ps aux | grep xxx 会把 grep 自身也列出来,需加 grep -v grep 或用 pgrep。
- ps 只能看到当前时刻的瞬时状态,持续高占用要看 top -d 或 sar。
- kill 默认发 SIGTERM 让进程优雅退出,加 -9 是 SIGKILL 强杀,会导致数据未落盘。
- 僵尸进程(Z 状态)父进程已死,kill 子进程无效,需重启父进程或系统来回收。
- ps -ef 与 ps aux 是两套格式,字段含义不同,脚本里混用容易解析错。
提示
- ps aux 和 ps -ef 都能查看所有进程,aux 是 BSD 风格,-ef 是 System V 风格。
- ps 显示的是快照,top/htop 显示的是实时信息。
- 僵尸进程状态为 Z,不能 kill,只能 kill 其父进程或重启系统。
- ps -eo pid,ppid,%cpu,%mem,etime,cmd --sort=-%cpu 里 etime 显示的是已运行时长(如 3-04:12 表示 3 天 4 小时),比 lstart 更易读。
- ps -o pid,stat,cmd 过滤进程时用 stat 列判断状态,D 表示不可中断睡眠(常见于 IO 阻塞)、S 可中断睡眠、T 已停止,比只看命令行更有信息量。
- ps --ppid <PID> 只列出某个父进程的直接子进程,比 pgrep -P 在需要精确一层关系时更快且不依赖额外工具。
由 巧匠 维护
公开更新于 2026年7月21日,内容持续校对官方文档。