Ser*_*nyy 4 c proc linux-kernel
我知道pgrep, top, 和ps所有查询/proc文件系统。到现在为止还挺好。然而让我想到的是,过去没有/proc文件系统。即使在今天,据我所知,Mac OS X 没有/proc文件系统,但top仍然访问进程信息,这表明这些信息应该直接来自内核。但是,我的问题是针对 Linux 的。哪些库和/或系统调用可用于直接查询进程信息,绕过/proc?
可以直接从 Linux 内核查询进程信息——通过读取/proc. 这是在 Linux、Solaris 和其他几个 Unix 变体上完成的方式。
古代 Unix 系统有一个ps命令,它是 setuid root 并映射一些内核内存(通过/dev/kmem或类似的)并解析内核数据结构。这需要ps具有特权(危险)并与确切的内核版本相关联(不方便)。
在现代 *BSD 系统上,ps通过调用该sysctl函数工作,该函数反过来进行系统调用以检索格式化为由二进制格式定义的结构的信息。MacOS 使用相同的机制。
Linux 没有这个 BSD 接口。它使用 procfs 和 sysfs 来允许用户空间从内核中检索信息。BSD 以二进制格式编组由专用系统调用检索的信息,而 Linux 将信息编组为通过对专用文件系统的普通文件访问检索的字符串。可以使用与古代 Unix 系统中相同的方法,但没有人这样做,因为它是如此低级的方法(需要特权并且需要在内核数据结构更改时进行更新)。
| 归档时间: |
|
| 查看次数: |
881 次 |
| 最近记录: |