1 分钟阅读 次阅读

本文旨在为提供一份清晰、实用的 ps (Process Status) 命令指南。

核心概念:理解两种选项风格

ps 命令历史悠久,因此它同时支持两种风格的命令行选项,这是其语法有时令人困惑的主要原因:

  1. Unix (System V) 风格:选项前加一个连字符 - (例如 -e, -f)。
  2. BSD 风格:选项前不加连字符 - (例如 a, u, x)。

本指南将聚焦于最常用、更直观的 BSD 风格。 最常见的命令 ps aux 就是 BSD 风格。


黄金组合:ps aux (最重要,必须掌握)

这是查看系统上所有进程最常用的命令,是绝大多数故障排查的起点。

ps aux

选项分解(为什么是 aux?)

  • a:列出与终端相关的所有用户的进程。
  • u:采用用户导向(user-oriented) 的详细格式输出,显示如用户、CPU%、内存%等关键信息。
  • x:列出与终端无关的进程(如系统守护进程、后台服务)。

组合效果a + x 确保了列出几乎所有进程(包括其他用户的和系统的),而 u 则提供了详尽的资源占用信息

输出信息解读

运行 ps aux 后,会看到类似下面的列,理解它们至关重要:

列名 含义 说明
USER 进程的所有者(哪个用户启动的)。  
PID 进程 ID。系统的唯一标识,用于管理(如杀死)该进程。  
%CPU 进程占用的 CPU 使用百分比  
%MEM 进程占用的物理内存使用百分比  
VSZ 进程使用的虚拟内存大小(单位 KB)。  
RSS 进程使用的常驻物理内存大小(单位 KB)。  
TTY 进程关联的终端。? 表示该进程与终端无关,通常是系统守护进程。  
STAT 进程状态码(见下方详解)。  
START 进程的启动时间。  
TIME 进程累计使用的 CPU 时间  
COMMAND 启动该进程的命令行(命令和参数)。  

STAT 状态码详解

状态码 含义
R 运行中 (Running) 或可运行(在运行队列中等待)。
S 中断睡眠 (Sleeping),可被唤醒(通常在等待某个事件完成,如 I/O 操作)。
D 不可中断睡眠(通常是进程正在等待磁盘 I/O,不能被杀死)。
T 停止 (Stopped),通常是由作业控制信号(如 Ctrl+Z)或调试器暂停。
Z 僵尸 (Zombie),进程已终止,但其退出状态尚未被父进程读取。
< 高优先级
N 低优先级
s 会话首进程 (session leader)。
l 多线程进程。
+ 位于前台进程组

实用命令组合

掌握了 ps aux,就可以组合出各种实用场景的命令。

1. 查找特定进程

这是最最常用的组合,使用 grep 过滤 ps aux 的输出。

# 查找所有与 nginx 相关的进程
ps aux | grep nginx

# 查找所有与 java 相关的进程,并忽略大小写
ps aux | grep -i java

# 一个技巧:这样写可以避免 grep 命令自身出现在结果中
ps aux | grep [n]ginx

2. 以树形显示进程层级

清晰展示进程的父子关系,便于理解进程是如何被创建的。

ps auxf   # BSD 风格
# 或者
ps -ef --forest # Unix 风格,效果类似

3. 查看当前用户自己的所有进程

如果只想查看自己运行的程序,而不看系统和其他用户的。

ps ux

4. 按资源占用排序(诊断问题)

快速找出消耗 CPU 或内存最多的进程。

# 按 CPU 使用率降序排序,并查看前 10 个进程
ps aux --sort=-%cpu | head -n 10

# 按内存使用率降序排序,并查看前 10 个进程
ps aux --sort=-%mem | head -n 10

(- 号表示降序,去掉 - 则为升序)

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

当已经知道目标的进程 ID (PID) 时。

ps -p <PID> -f  # 使用 Unix 风格显示完整信息
ps -p 1234 u    # 结合 BSD 风格显示详细信息
# 例如: ps -p 5678 u

常用命令速查表

命令 作用描述 适用场景
ps aux 查看所有进程的详细信息 系统进程总览,排查问题的第一步
ps aux \| grep <关键词> 查找特定进程 定位程序/服务,查看其 PID 和资源占用
ps ux 查看当前用户的所有进程 检查自己运行的程序和脚本
ps auxf / ps -ef --forest 树形显示进程父子关系 理解进程的启动层次和依赖关系
ps aux --sort=-%cpu \| head -10 按 CPU 使用率排序 诊断系统 CPU 负载过高的问题
ps aux --sort=-%mem \| head -10 按内存使用率排序 诊断系统内存不足的问题
ps -p <PID> -o pid,user,%cpu,%mem,command 查看指定 PID 进程的特定信息 自定义输出字段,精确定位信息

留下评论