1. ps aux命令输出通常包含以下字段:

字段名 含义 单位/说明
USER 进程所属用户 用户名或UID
PID 进程ID 唯一标识符,用于操作进程(如kill PID)
%CPU 进程占用的CPU百分比 基于核心数的相对值(多核系统中N核最大为N*100%)
%MEM 进程占用的无力内存百分比 相对总内存的占比
VSZ 虚拟内存大小(Virtual Memory Size) KB包括进程可访问的所有内存(物理内存、交换分区、共享库等)
RSS 常驻集大小(Resident Set Size) KB世纪占用的物理内存(不包括交换分区和未使用的共享库)
TTY 控制终端 ?表示无终端(如守护进程),ps/0表示伪终端(如SSH连接)
STAT 进程状态码 由字母和符号组成,反应进程当前状态
START 进程启动时间或日前 若启动时间超过24小时,显示日期(如10-05),否则显示时间(如14:30)
TIME 进程累计CPU时间 格式分:秒时:分:秒(仅计算进程占用CPU的时间,非运行时长)
COMMAND 启动进程的命令行 包括路径和参数(被截断时可使用ps auxww显示完整命令)

2. STAT进程状态码解析

状态码 含义 示例场景
R Running(运行中) 正在占用CPU执行任务
S Sleeping(可中断睡眠) 等待事件完成(如I/O),可被信号唤醒
D Disk Sleep(不可中断睡眠) 等待磁盘I/O,无法被kill信号终止
Z Zombie(僵尸进程) 进程已终止,但父进程未回收其资源
T Stopped(停止) SIGSTOP信号暂停(如Ctrl+Z)
W Paging(换页) 内核2.6前使用,现代系统罕见
< 高优先级进程 nicerenice提升优先级
N 低优先级进程 nice降低优先级
L 锁定内存页 实时进程使用mlock()锁定内存
s 会话领导者(session leader) 如登陆shell进程
l 多线程进程 如Java应用程序(多线程)
+ 前台进程组 终端直接运行的命令(如ls)

示例: S<l+表示”可中断睡眠、高优先级、多线程、前台进程组”。


3. VSZ vs RSS虚拟内存与物理内存

  • VSZ(Virtual Size): 进程可访问的”虚拟地址空间”总量,包括未分配的内存、共享库、交换分区等,仅反应理论上的内存需求,不代表实际占用
  • RSS(Resident Set Size): 进程实际驻留在物理内存中的大小,反应进程对内存的真实消耗。但需注意: RSS包括共享内存(若多个进程使用同一共享库,该部分内存会被重复计算)。

4. %CPUTIME的区别

  • %CPU: 瞬时快照,表示进程在最近一次采样周期内(通常0.1秒)占用CPU的百分比。
  • TIME: 累计值,表示进程从启动到当前累计占用的CPU时间(仅计算实际运行时,不包括睡眠状态)。

示例: 一个进程%CPU为100%表示当前正满负荷占用1核CPU;TIME01:30:00表示累计占用CPU1.5小时。

5. 常见用法与实战案例

5.1 基础用法: 查看所有进程

1
ps aux

输出系统中所有进程的详细信息,适合整体了解系统进程状态。

5.2 过滤特定进程:结合grep

1
2
ps aux | grep nginx  # 查找名为`nginx`的进程
ps aux | grep nginx | grep -v grep # 避免`grep`命令自身被匹配

5.3 按CPU/内存使用率排序

1
ps aux --sort=-%cpu | head -n 11 # 查看CPU使用率最高的10个进程

说明: --sort=-%cpu表示按%cpu降序排练 -n 11包含表头行

1
ps aux --sort=-%mem | head -n 6 # 查看内存使用率最高的5个进程
1
ps aux --sort=-%cpu,-%mem | head # 先按`%CPU`降序,再按`%MEM`降序排序

5.4 查看特定用户的进程

1
ps aux | grep ^alice # 查看用户`alice`的所有进程
1
ps -u alice # 简化版SystemV风格

5.5 查找僵尸进程

1
ps aux | grep Z

5.6 结合watch实时监控进程变化

1
watch -n 2 'ps aux --sort=-%cpu | head' # 每2秒刷新一次top CPU进程

5.7 使用pgrep定位PID结合ps查看详细信息

1
ps aux | grep -E "$(pgrep nginx | tr '\n' '|' | sed 's/|$//')"