为什么 UID 信息不在 /proc/X/stat 中?

And*_*w B 5 linux proc

对于学术界来说,这是一个愚蠢的问题;UID如果需要,我知道从哪里获取信息。根据 proc(5) 手册页:

       /proc/[number]/stat
              Status information about the process.  This is used by ps(1).  It is defined in /usr/src/linux/fs/proc/array.c.

       /proc/[number]/statm
              Provides information about memory status in pages.  The columns are:

       /proc/[number]/status
              Provides much of the information in /proc/[number]/stat and /proc/[number]/statm in a format that’s easier for humans to parse.
Run Code Online (Sandbox Code Playgroud)

我觉得有趣的是stat不包含有关的信息UIDEUID等的过程中,还没有status做。一种奇怪的是,人们被迫改用“人类可读”的文件。有没有人碰巧知道这个副手的原因?

slm*_*slm 2

在处理数据时,大多数时候,关键是仅保留与您的特定任务集相关的数据,仅此而已。暴露的大部分数据/proc都是出于单一目的,即需要对其具有可见性的工具等。

鉴于这些评论,我会假设三件事/proc/[number]/stat

  1. 此处显示的数据与 中的函数和数据对象相关/usr/src/linux/fs/proc/array.c
  2. 该数据也与 相关ps
  3. 查看此处的数据,您会发现这里没有任何特定于用户的数据。这一切都是面向流程的。

注意:对于#2。这是与 相关的流程数据ps。用户拥有的进程保存在内核其他地方的不同数据结构中。

另一方面,对于/proc/[number]/status,注释几乎可以告诉您这些数据的用途,即人类阅读它的目的。因此,从工具的角度来看,内核中的这个节点很可能没有其他用途,然后将来自其他来源的数据整理到一个地方供用户使用。

额外证据

如果您需要更多证明,请查看我不久前回答的这个问题,标题为:/proc/meminfo MemTotal =? 。这个问题涵盖了/proc/meminfo,这里也是一个类似的问题。一些数据在内核启动期间在dmesg日志输出下公开。然而,尽管这些数据与记忆相关并且/proc/meminfo被认为相关,但这些数据并不存在,同样是因为它对以下方面没有用处:

  1. 将使用的工具的目标受众/proc/meminfo
  2. 与使用 中数据的内核内部函数、方法和数据结构无关/proc/meminfo

参考

  • @AndrewB 作为记录,`ps` 在`/proc/<pid>/status` 中查找它!它同时使用“stat”和“status”文件,因为两者都不包含它所需的所有信息(uid 仅在“status”中,控制终端仅在“stat”中......这是一团糟)。 (2认同)