关于ps aux和ps -ef

ps -auxps -ef 都是 Linux 系统中用来查看进程信息的命令,但它们来自不同的历史渊源(BSD 风格 vs System V 风格),在输出格式、语法细节和显示内容上有一些区别。


一、直观对比(先看输出差异)

对比项ps -auxps -ef
风格BSD 风格System V 风格
命令来源来源于 BSD Unix来源于 AT&T Unix
常见系统Linux、FreeBSD、macOSLinux、Solaris、AIX
输出格式11列(USER, PID, %CPU, %MEM, VSZ, RSS, TTY, STAT, START, TIME, COMMAND)8列(UID, PID, PPID, C, STIME, TTY, TIME, CMD)
关键信息包含 CPU 和内存使用率(%CPU, %MEM包含父进程 ID(PPID
语法细节-aux 中的 - 可以省略(通常写成 ps aux-ef 中的 - 必须保留,否则意义不同(ps ef 是显示进程树)

二、详细解析

1. ps -aux(或 ps aux

  • 含义:显示所有用户的所有进程,附带 CPU 和内存使用率。
  • 常用场景
  • 想快速找到CPU或内存占用最高的进程(配合 --sort 使用)。
  • 需要看进程的状态 STAT(如 R 运行、S 休眠、Z 僵尸)。
  • 系统性能排查时常用。

示例输出片段:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.2 128160  6944 ?        Ss   10:15   0:02 /usr/lib/systemd/systemd
mysql     1234  5.0 10.2 1620000 102400 ?      Sl   10:16   1:30 /usr/sbin/mysqld

关键列解读

  • %CPU:CPU 使用率
  • %MEM:内存使用率
  • STAT:进程状态(Ss 表示休眠的会话领导者,R 表示运行,Z 表示僵尸)
  • VSZ:虚拟内存大小
  • RSS:物理内存大小

2. ps -ef

  • 含义:显示所有进程的完整信息,重点是进程之间的父子关系
  • 常用场景
  • 需要查看父进程 ID(PPID),比如找出某个进程是谁启动的。
  • 排查僵尸进程的父进程。
  • 兼容性好,几乎所有 Unix/Linux 系统都支持。

示例输出片段:

UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 10:15 ?        00:00:02 /usr/lib/systemd/systemd
root      1234     1  5 10:16 ?        00:01:30 /usr/sbin/mysqld

关键列解读

  • PPID:父进程 ID(比如上面 MySQL 的 PPID 是 1,说明它由 systemd 启动)
  • C:CPU 使用率(和 %CPU 类似,但通常只显示整数)
  • STIME:启动时间
  • TIME:累计 CPU 时间

三、实际工作中怎么选?

需求场景推荐命令原因
想看 CPU/内存占用ps aux直接显示 %CPU%MEM
想看进程树/父子关系ps -ef直接显示 PPID
想杀僵尸进程ps -ef需要知道僵尸进程的父进程是谁
想快速定位高资源进程ps aux --sort=-%cpu | head按 CPU 排序
想查看完整命令行ps auxps -ef两者最后一列都是 COMMAND/CMD
写脚本时通用性ps -ef几乎所有 Unix 变种都支持

四、容易踩的坑

1. 不要把 ps aux 写成 ps -aux(虽然现在能兼容)

在 POSIX 标准中,ps -aux 的意思是显示用户名为 “x” 的进程,如果不存在用户 x,则打印错误。但大多数 Linux 发行版为了兼容性,把 ps -aux 也解释为 ps aux
最佳实践:直接写 ps aux,不要加 -

2. ps efps -ef

  • ps -ef:显示所有进程
  • ps ef:显示进程树(e 表示所有进程,f 表示 forest 树状格式)

3. 想在 ps -ef 里看 CPU 占用怎么办?

ps -eo pid,ppid,%cpu,%mem,cmd   # 自定义输出格式

或者直接用 ps aux


五、一句话总结

  • ps aux:适合监控资源,给你 CPU、内存、状态。
  • ps -ef:适合追踪关系,给你父进程 ID。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注