AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 699019
Accepted
Bruce Adams
Bruce Adams
Asked: 2022-04-14 16:08:39 +0800 CST2022-04-14 16:08:39 +0800 CST 2022-04-14 16:08:39 +0800 CST

鉴于我们有 API /proc/pid/status 应该/可以 /proc/pid/stat 被弃用吗?

  • 772

我对通过procfs在 GNU/Linux 中可用的进程信息有一些疑问。这最初是因为希望从应用程序中提取 vmPeak、vmSize、vmRSS 和 vmHWM。

我从一个工作假设开始,即 根据kernel.org的评论,该版本是机器可读/proc/<pid>/status的人类可读版本:/proc/<pid>/stat

stat - 进程状态

status - 人类可读形式的进程状态

当我注意到vmPeak只能从/proc/pid/status.

似乎/proc/pid/status实际上结合了来自多个地方的值并添加了一些自己的值。

鉴于我们/proc/pid/status是否有任何理由使用/proc/pid/stat?需要什么? 为什么有两个 API?可能/proc/pid/stat被弃用还是有用?

stat不等价。它提供的字段较少。它只是稍微容易解析(如果你天真地这样做,会有一个微妙的错误)。任何使用 stat 的程序都可以轻松切换到使用状态。有多少人真的会崩溃?

我刚刚为两者编写了解析器(尽管最终我将一个用于 stat ,因为 API 不太有用)。对于机器可读的内容不多。事实上,“状态”的解析器最终变得更加优雅,因为您可以将它直接读入您喜欢的任何类型的键值存储中。状态似乎更容易从任何语言解析并且可扩展。

有多少程序实际上依赖于“stat”而不是“status”?他们中的任何一个人真的需要这可能提供的微不足道的解析速度吗?

现在我知道由于向后兼容性,stat 多年来无法删除,但您可以说“现在已弃用”,除非有充分的理由保留它(这将是我问题的一个可能答案)。

如果性能是一个问题,那么通过虚拟文件系统将此内核信息转换为文本并返回的性能肯定不如库调用的性能。

正如这个答案所暗示的那样,继续添加新的 API 可能令人讨厌,但鉴于其中大部分是稳定的,为什么没有 C 库 API,例如sysinfo?

linux proc
  • 3 3 个回答
  • 393 Views

3 个回答

  • Voted
  1. Stephen Kitt
    2022-04-14T21:54:38+08:002022-04-14T21:54:38+08:00

    内核仍然提供/proc/…/stat向后兼容性的原因,不仅是与旧版本的程序 - 如果您procps现在构建实用程序,您最终会得到仍然读取ps的程序( 、pgrep、pidof等)。/proc/…/stat

    可以想象,可以更改procps为仅使用/proc/…/status; 旧的性能参数不再相关,status从内核中检索与检索stat. 但这无助于现有系统在不改变用户空间工具的情况下需要更新内核。

    就内核而言,这是保留stat. 为什么有一个永不破坏用户空间的 Linux 内核策略?

    您当然可以自由选择只使用/proc/…/status和完全避免/proc/…/stat。我不知道有任何普遍共识认为后者应该被弃用;我从未见过它被讨论过(这并不意味着它没有被讨论过),并且它没有在手册procfs页或内核的过时 ABI 符号(包括/proc条目)中标记为已弃用。也许这只是惯性,如果你在更多内核开发人员可能会注意到的圈子中提出它,那么显然存在共识。

    (请注意,据我所知, 中的某些字段stat不可用status- 至少是进程组和会话 ID。)

    关于sysinfo-style 界面,您总是可以建议一个。基于文本的界面不会消失,不仅是为了保持向后兼容性;以 Unix 风格系统中的许多文本处理工具都可以使用的格式保存这些信息太方便了,无法摆脱。

    • 2
  2. Artem S. Tashkinov
    2022-04-14T21:53:58+08:002022-04-14T21:53:58+08:00

    https://lkml.org/lkml/2012/12/23/75

    WE DO NOT BREAK USERSPACE!

    只要存在依赖stat它的旧实用程序/应用程序就不会被删除,IOW 它很可能永远不会被删除。

    如果您想使用其中任何一个 - 这是您的选择。

    • 1
  3. Best Answer
    Bruce Adams
    2022-04-17T03:12:08+08:002022-04-17T03:12:08+08:00

    这只是个人意见,但我认为/proc/pid/stat应该被视为已弃用,您应该/proc/pid/status在所有情况下使用。

    stat解析效率并没有提高多少,而且它有一个微妙的危险,可能导致错误,但甚至可能带来安全风险(例如,请参见this)。它还包含比 更少的字段status。

    看:

    • 用空格分割 /proc/pid/stat 的缺点是什么? 并且
    • 明确解析 /proc/<pid>/stat 的方法(给定名称字段的任意内容)
    • -3

相关问题

  • 有没有办法让 ls 只显示某些目录的隐藏文件?

  • 使用键盘快捷键启动/停止 systemd 服务 [关闭]

  • 需要一些系统调用

  • astyle 不会更改源文件格式

  • 通过标签将根文件系统传递给linux内核

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve