Linux下ps -ef 和 ps aux 的区别及格式详解

本文详细解析了Linux环境下ps-ef与psaux命令的区别,包括它们的输出格式及字段含义,并介绍了BSD与SystemV两种操作风格的相关背景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux下显示系统进程的命令ps,最常用的有ps -ef 和ps aux。这两个到底有什么区别呢?

这里要说一下 BSD vs System V

这里需要说明的是:Linux不能称为"标准的Unix“而只被称为"Unix Like"原因有一部分就是来自它的操作风格介乎两者之间,而且不同的厂商为了照顾不同的用户,各linux发行版本的操作风格之间也有不小的出入。

  • BSD(BerkeleySoftware Distribution,伯克利软件套件)是Unix的衍生系统,1970年代由伯克利加州大学(UniversityofCalifornia, Berkeley)开创。BSD用来代表由此派生出的各种套件集合。BSD 常被当作工作站级别的Unix系统,这得归功于BSD 使用授权非常地宽松,许多1980年代成立的计算机公司,不少都从BSD 中获益,比较著名的例子如DEC的Ultrix,以及Sun公司的SunOS。1990年代,BSD 很大程度上被SystemV 4.x版以及OSF/1系统所取代,但其开源版本被采用,促进了因特网的开发。

  • System V, 曾经也被称为AT&T SystemV,是Unix操作系统众多版本中的一支。它最初由AT&T开发,在1983年第一次发布。一共发行了4个SystemV的主要版本:版本1、2、3和4。System V Release4,或者称为SVR4,是最成功的版本,成为一些UNIX共同特性的源头,例如”SysV 初始化脚本“(/etc/init.d),用来控制系统启动和关闭,SystemV Interface Definition (SVID)是一个SystemV如何工作的标准定义。

  • ps aux最初用到Unix Style中,而ps -ef被用在System V Style中,两者输出略有不同。

ps -ef 是用标准的格式显示进程的、其格式如下
在这里插入图片描述

其中各列的内容意思如下

  • UID //用户ID、但输出的是用户名
  • PID //进程的ID
  • PPID //父进程ID
  • C //进程占用CPU的百分比
  • STIME //进程启动到现在的时间
  • TTY //该进程在那个终端上运行,若与终端无关,则显示? 若为pts/0等,则表示由网络连接主机进程。
  • CMD //命令的名称和参数

ps aux 是用BSD的格式来显示、其格式如下
在这里插入图片描述

同ps -ef 不同的有列有

  • USER //用户名
  • %CPU //进程占用的CPU百分比
  • %MEM //占用内存的百分比
  • VSZ //该进程使用的虚拟內存量(KB)
  • RSS //该进程占用的固定內存量(KB)(驻留中页的数量)
  • STAT //进程的状态
  • START //该进程被触发启动时间
  • TIME //该进程实际使用CPU运行的时间

其中STAT状态位常见的状态字符有

  • D //无法中断的休眠状态(通常 IO 的进程);
  • R //正在运行可中在队列中可过行的;
  • S //处于休眠状态;
  • T //停止或被追踪;
  • W //进入内存交换 (从内核2.6开始无效);
  • X //死掉的进程 (基本很少见);
  • Z //僵尸进程;
  • < //优先级高的进程
  • N //优先级较低的进程
  • L //有些页被锁进内存;
  • s //进程的领导者(在它之下有子进程);
  • l //多线程,克隆线程(使用 CLONE_THREAD, 类似 NPTL pthreads);
    •  //位于后台的进程组;
      
<think>我们正在讨论的是Linux中的ps命令,具体是ps -efps -aux区别。根据引用内容,我们可以总结如下: 1. **ps -ef**: - `-e` 选项表示显示所有进程(包括守护进程),等同于`-A`。 - `-f` 选项表示完整格式输出,提供详细的进程信息。 - 输出列包括:UID(用户ID)、PID(进程ID)、PPID(父进程ID)、C(CPU利用率)、STIME(启动时间)、TTY(终端)、TIME(占用CPU时间)、CMD(启动命令及其参数)。 - 示例输出(引用[3]): ``` UID PID PPID C STIME TTY TIME CMD root 1 0 0 12月08 ? 00:00:01 /sbin/init root 2 0 0 12月08 ? 00:00:00 [kthreadd] ``` 2. **ps aux**: - 注意:这里没有短横线,是`ps aux`(历史原因,aux是BSD风格的选项,不带短横线)。 - `a` 表示显示所有用户的进程(包括其他用户的进程)。 - `u` 表示以用户为中心的格式,显示详细的资源使用情况。 - `x` 表示显示没有控制终端的进程(例如守护进程)。 - 输出列包括:USER(用户名)、PID(进程ID)、%CPU(CPU使用百分比)、%MEM(内存使用百分比)、VSZ(虚拟内存大小)、RSS(常驻内存大小)、TTY(终端)、STAT(进程状态)、START(启动时间)、TIME(占用CPU时间)、COMMAND(命令)。 - 示例输出(引用[2]中描述): ``` USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 18592 3188 ? Ss Dec08 0:01 /sbin/init ``` **主要区别**: - **输出格式**:`ps -ef` 提供的是标准格式(完整格式),而 `ps aux` 提供的是BSD格式(用户格式),后者更注重资源使用情况(如%CPU, %MEM)。 - **信息侧重点**:`ps aux` 会显示进程的资源使用情况(CPU百分比、内存百分比等),而 `ps -ef` 则不会显示这些,但会显示父进程ID(PPID)。 - **历史背景**:`ps -ef` 是Unix System V风格的选项,而 `ps aux` 是BSD风格的选项。在大多数Linux系统中,两种方式都支持。 **注意**:`ps aux` 实际上等同于 `ps -aux`(带短横线)吗?在大多数现代Linux系统中,`ps aux`(不带短横线)是标准写法,而`ps -aux`(带短横线)在有些系统上可能被解释为显示用户名为“x”的进程(因为按照Unix传统,短选项后面可以跟多个字母,但这里`a``u``x`都是选项)。所以通常推荐使用不带短横线的`ps aux`。 **总结**: - 如果需要查看进程的父进程ID(PPID)完整的命令行参数,使用`ps -ef`。 - 如果需要查看进程的资源占用情况(如CPU、内存百分比),使用`ps aux`。 相关问题: 1. 如何查看特定用户的进程? 2. 如何根据内存使用率排序进程? 3. ps命令中STAT列的含义是什么? 4. 如何实时监控进程状态? 5. 如何查看进程树结构?</think>### `ps -ef` 与 `ps aux` 的具体区别 以下是两种命令的核心差异对比表: | **特性** | **`ps -ef`** | **`ps aux`** | |------------------|---------------------------------------------|---------------------------------------------| | **命令格式** | Unix标准风格 (`-`开头) | BSD风格 (无`-`) | | **显示范围** | 所有进程(含守护进程) | 所有进程(含无终端的守护进程) | | **核心信息** | PID, PPID, UID, CMD | %CPU, %MEM, VSZ, RSS, STAT | | **关键字段** | PPID(父进程ID) | 资源占用(CPU/内存百分比) | | **时间格式** | STIME(启动日期) | START(启动时间精确到分钟) | | **用户列** | UID(用户ID) | USER(用户名) | | **命令列** | CMD(完整命令行参数) | COMMAND(命令名) | | **典型用途** | 进程关系分析(如父子进程) | 资源监控(CPU/内存消耗) | --- #### 详细解析: 1. **信息维度差异** - **`ps -ef`**(System V风格) ```bash UID PID PPID C STIME TTY TIME CMD root 1 0 0 Jan01 ? 00:00:01 /sbin/init ``` - 强调**进程关系**:包含父进程ID(PPID) - 显示**完整命令行**(CMD列包含所有参数)[^2][^3] - **`ps aux`**(BSD风格) ```bash USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 18592 3188 ? Ss Jan01 0:01 /sbin/init ``` - 强调**资源占用**:包含CPU使用率(%CPU)、内存使用率(%MEM) - 显示**进程状态**(STAT列:如`Ss`表示休眠状态)[^1][^2] 2. **字段含义区别** - **时间字段**: - `ps -ef`的`STIME`:进程启动日期(如`Jan01`) - `ps aux`的`START`:精确到分钟(如`08:42`) - **用户标识**: - `ps -ef`显示`UID`(用户ID数字) - `ps aux`显示`USER`(用户名如`root`) - **内存指标**: - `VSZ`:虚拟内存大小(KB) - `RSS`:实际物理内存占用(KB) 3. **使用场景建议** - 需要**排查进程依赖关系** → 用 `ps -ef | grep [进程名]` - 需要**监控资源瓶颈** → 用 `ps aux --sort=-%mem | head`(按内存排序) - 需要**查看守护进程** → 两者均可,但`ps aux`会显示`STAT`状态 --- #### 示例对比 **`ps -ef` 输出片段**(引用[3]): ```bash UID PID PPID C STIME TTY TIME CMD root 1 0 0 12月08 ? 00:00:01 /sbin/init root 2 0 0 12月08 ? 00:00:00 [kthreadd] ``` → 可见父进程ID(PPID)完整启动路径 **`ps aux` 输出片段**: ```bash USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 18592 3188 ? Ss Jan01 0:01 /sbin/init root 2 0.0 0.0 0 0 ? S Jan01 0:00 [kthreadd] ``` → 可见资源消耗(%CPU/%MEM)进程状态(`Ss`) --- ### 相关问题 1. 如何查看某个进程的父进程? 2. 怎样按内存使用率排序进程列表? 3. `ps`命令中的`STAT`状态符号(如`Ss`, `Z`)代表什么含义? 4. 如何持续监控进程资源变化? 5. `ps``top`命令在监控进程时有何本质区别? > 提示:排查进程问题时可组合使用命令,例如 `ps -ef | grep nginx` + `ps aux | grep nginx` 交叉验证进程状态资源占用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

静谧之心

感谢您的鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值