当前位置: 首页 > news >正文

linux ps -a与-e的区别

文章目录

    • 1. 概念层面
    • 2. 实现差异(内核数据筛选逻辑)
    • 3. 实际输出对比(实验验证)
    • 4. 常见误区与补充
    • 一句话总结


1. 概念层面

  • ps -a 中的 -a 是 BSD 风格选项(注意前面没有连字符时也是 BSD 风格)。
    含义:
    “Select all processes except both session leaders and processes not associated with a terminal.”
    直译:选出「除了会话首进程(session leader)以及没有控制终端的进程」以外的所有进程。
    典型场景:你在图形界面或 ssh 登录后敲 ps -a,会看到自己和别的用户跑在前台/后台、但仍有终端的程序,不会看到守护进程(daemon)、systemd、内核线程等。

  • ps -e 中的 -e 是标准 UNIX(POSIX)风格选项。
    含义:
    “Select every process on the system.”
    直译:系统上每一个进程都列出来,不论有没有终端、是不是会话首进程、属于哪个用户。
    典型场景:想一次性看包括 kthreadd、systemd、crond、dockerd 在内的全部进程时用它。


2. 实现差异(内核数据筛选逻辑)

procfs 里每个进程 /proc/PID/stat 的第 6 字段是 tty 设备号,ps 读取后:

  • -a 会过滤掉:
    – 第 6 字段为 0(无控制终端)的 task;
    – 第 5 字段(pgid)== 第 4 字段(pid)的 task(即 session leader);
  • -e 不做任何过滤。

3. 实际输出对比(实验验证)

打开两个终端做实验:

# 终端 A:后台跑一个无终端的 sleep
nohup sleep 1000 &# 终端 B:跑一个前台 sleep
sleep 2000# 再开一个终端 C 做观察
ps -a | grep sleep
# 输出只有一行:PID 为 2000 的那个(带 pts/?)
ps -e | grep sleep
# 输出两行:1000 和 2000 都在

结论:-anohup 启动的无终端进程过滤掉了。

再看守护进程:

ps -a | wc -l       # 通常几十行
ps -e | wc -l       # 通常几百行

4. 常见误区与补充

  • 误区 1:-a 只会显示“当前用户”的进程?
    错。-a 会显示所有用户的进程,只是排除了无终端/会话首进程,因此如果你切到 root 再跑 ps -a,依旧看不到 crond、sshd 等 daemon。

  • 误区 2:-A-e 是否不同?
    在 Linux 的 procps-ng 实现中,-A-e 完全等价,只是 POSIX 标准保留了 -e,BSD 风格习惯用 -A

  • 补充:想要带完整格式可以组合 -f(full-format):
    ps -ef 等价于 ps -e -f,最常用;
    ps -af 则仍然是“有终端且非会话首进程”的精简集合。


一句话总结

ps -a 把「无终端进程 + 会话首进程」剔掉,等于“有人机交互痕迹的进程”;
ps -e 一个不落地把系统里所有 task 全拎出来。

http://www.dtcms.com/a/288829.html

相关文章:

  • Spring Cloud Gateway高危隐患
  • 社交圈子系统开源社交源码 / 小程序+H5+APP 多端互通的底层技术分析
  • [特殊字符] 小程序 vs 智能体:下一代应用开发,谁主沉浮?
  • 「Java案例」利用方法打印乘法表
  • 传输层协议 TCP
  • 相机模型和对极几何
  • SparseTSF:用 1000 个参数进行长序列预测建模
  • 【no vue no bug】 npm : 无法加载文件 D:\software\nodeJS\node22\npm.ps1
  • 构建一种安全的老式测试仪,用于具有限流灯泡,模拟仪表和可变输出的交流设备
  • SpringBoot集成MyBatis的SQL拦截器实战
  • Shell脚本-grep工具
  • Node.js:函数、路由、全局对象
  • 5.2.4 指令执行过程
  • playwright 最佳实践
  • PostgreSQL实战:高效SQL技巧
  • 第三章-提示词-中级:进阶技巧与实践指南(12/36)
  • Java什么是原子性
  • 17.TaskExecutor与ResourceManager交互
  • 论文阅读:Instruct BLIP (2023.5)
  • 【Lua】多脚本引用
  • Java反射:打破静态限制的利器
  • 【笔记】Anaconda 重装后虚拟环境写入路径异常的完整排查与解决过程
  • MySQL—表设计和聚合函数以及正则表达式
  • LeetCode 1712.将数组分成三个子数组的方案数
  • ZooKeeper学习专栏(二):深入 Watch 机制与会话管理
  • BST(二叉搜索树)的笔试大题(C语言)
  • [硬件电路-59]:电源:电子存储的仓库,电能的发生地,电场的动力场所
  • 手推OpenGL相机的正交投影矩阵和透视投影矩阵(附源码)
  • 【AI】文生图文生视频
  • 第三章自定义检视面板_创建自定义编辑器类_编辑器操作的撤销与恢复(本章进度3/9)