
ps 是 Linux 中最基础、最常用的进程查看命令,它能快速快照当前系统中运行的进程及其状态。注意:ps 默认只显示当前终端启动的进程(即本会话的进程),不显示全部进程,这点常被初学者忽略。
常用组合:看全、看树、看详细
想真正掌握进程状态,这几个经典选项组合必须熟记:
- ps aux:显示所有用户的所有进程(a)、包含没有控制终端的进程(x)、使用 BSD 风格格式(u)。这是最常用的“全量查看”方式,字段含 %CPU、%MEM、VSZ、RSS、TTY、STAT、START、TIME、COMMAND 等关键信息。
- ps -ef:显示所有进程(e)、完整格式(f),采用 System V 风格。字段包括 UID、PID、PPID(父进程ID)、C、STIME、TTY、TIME、CMD。适合查进程层级关系和启动时间。
- ps -ejH:以树状结构展示进程(H 表示层级缩进,-e 和 -j 保证全量和作业信息)。配合 ps -e --forest 效果更直观,一眼看出父子/子进程归属。
聚焦特定进程:过滤与筛选
实际运维中很少需要看全部进程,更多是查某个服务或关键字:
- 查 nginx 进程:ps aux | grep nginx(注意加空格避免匹配到 grep 自身,可写成 ps aux | grep "[n]ginx")
- 查属于用户 www 的进程:ps -u www
- 查 PID 为 1234 的进程详情:ps -p 1234 -f
- 按 CPU 或内存排序(配合 sort):ps aux --sort=-%cpu | head -10(取 CPU 占用前 10)
读懂 STAT 列:进程状态码含义
ps 输出中的 STAT(或 S)列是核心——它告诉你进程正在干什么。常见状态码有:
- R:运行中(running)或可运行(runnable,等待 CPU)
- S:睡眠(sleeping),可被信号唤醒(最常见,多数后台进程处于此态)
- D:不可中断睡眠(uninterruptible sleep),通常在等 I/O(如磁盘读写),kill 无效
- Z:僵尸进程(zombie),已终止但父进程未回收其退出状态,需排查父进程是否异常
- T:已停止(stopped)或被追踪(traced),比如被调试器暂停或收到 SIGSTOP
- 附加符号:(高优先级)、N(低优先级)、s(会话 leader)、+(前台进程组)
实用技巧与避坑提醒
几个容易踩的点,帮你少走弯路:
- ps 是瞬间快照,不刷新。要动态监控请用 top 或 htop;想定时刷新可用 watch -n 1 'ps aux --sort=-%mem | head -5'
- 区分 vsz(虚拟内存大小)和 rss(物理内存占用),判断内存压力看 rss 更准
- UID 为 4294967295 或显示为 4294967295 的进程,通常是内核线程(如 kthreadd),无对应用户,勿误杀
- ps 默认列宽有限,字段被截断时,可用 ps -eo pid,ppid,comm,%cpu,%mem,cmd 显式指定所需字段并避免换行










