人人都会AI编程

ps:进程快照查看,常用参数组合

更新时间:2026-07-12

ps 命令用于显示当前系统进程的瞬时快照。它不是持续监控工具,而是执行瞬间读取进程状态并打印出来。掌握几个常用参数组合,能让你快速定位问题进程、查看资源占用或理解进程间父子关系。

1. 查看所有用户的所有进程

BSD 风格(最常用):

ps aux
  • a:显示所有终端用户(包括其他用户)的进程
  • u:以用户友好的格式显示,包含 CPU、内存使用率
  • x:不限制于有控制终端的进程,显示后台守护进程

输出列:
USER(进程所有者)、PID(进程ID)、%CPU%MEMVSZ(虚拟内存大小)、RSS(物理内存驻留大小)、TTY(终端)、STAT(进程状态)、START(启动时间)、TIME(累计CPU时间)、COMMAND(命令行)

Unix 风格(同样常用):

ps -ef
  • -e:显示所有进程
  • -f:全格式,显示父进程ID(PPID)等

输出列:
UIDPIDPPIDC(CPU占用)、STIME(启动时间)、TTYTIMECMD

这两种风格任选其一,都能快速列出全部进程。ps aux 更侧重资源消耗,ps -ef 更侧重进程层级。

2. 按名称过滤进程

ps aux | grep nginx
ps -ef | grep sshd

结合 grep 过滤出感兴趣的服务进程。grep 本身也会出现在结果中(因为 grep 进程命令行里包含搜索词),这是正常现象,可以追加 | grep -v grep 排除。

或者直接使用 pgrep 命令获得简洁的 PID 列表:

pgrep -a nginx    # -a 同时显示进程名和 PID

3. 显示进程树

ps auxf
ps -ejH
ps axjf           # 以树状图查看父子关系

fH 参数会以 ASCII 树形结构展示父进程与子进程的嵌套关系,非常适合排查某个服务 fork 出了多少子进程,或追踪孤儿进程的源头。

4. 自定义输出列(极为实用)

当你只关心特定的进程属性时,使用 -o 参数可以定制输出,减少无关信息:

ps -eo pid,ppid,user,%cpu,%mem,comm --sort=-%cpu | head -20
  • -eo:指定显示的列(如 pid, ppid, user, comm, %cpu 等)
  • --sort=-%cpu:按 CPU 使用率降序排列(- 表示降序)
  • 常见列名:pidppiduser%cpu%memrssvszstatstarttimecomm(仅命令名)、args(完整命令行)

这种高度自定义的方式使 ps 可以替代许多监控脚本中的多次过滤,一条命令直接输出需要的数据。

5. 查看特定进程的详细信息

如果你知道 PID(例如 1234),可以直接查询:

ps -p 1234 -f        # Unix 风格全格式
ps -p 1234 u         # BSD 风格详细
ps -p 1234 -o pid,ppid,user,stat,args  # 自定义输出

也可以用 /proc/1234/ 文件系统来获取更多细节,但 ps 是最快捷的摘要方式。

6. 检查某个程序的所有实例

ps -C nginx -o pid,user,%cpu,%mem,args

-C 直接按命令名(comm 字段)筛选,比 grep 更精确,且不需要担心过滤 grep 自身。

实用总结

  • 日常巡检:ps auxps -ef
  • 排查 CPU/内存消耗大户:ps aux --sort=-%cpu | head -10
  • 追踪进程父子关系:ps axjfps auxf
  • 脚本中提取进程数据:ps -eo 自定义列
  • 精确找一个程序:ps -C 进程名 -o 所需字段

ps 是所有进程管理操作的基础,配合 top/htop 的动态监控和 pidstat 的资源明细,组成完整的进程诊断工具箱。记住,ps 是“拍照”,top 是“录像”,根据需求选择工具。