如何在 UNIX 变体(例如 macOS)上使用 sysctl 来读取通常在 Linux 上的 /proc/self 中找到的信息?

如何在 UNIX 变体(例如 macOS)上使用 sysctl 来读取通常在 Linux 上的 /proc/self 中找到的信息?

我已经使用/proc/self很长一段时间来阅读与流程相关的信息,例如/proc/self/maps等。

但是,在某些 UNIX 变体(例如 macOS)上,procfs未实现文件系统;但就像这样关联状态,应该可以使用 获得类似的信息sysctl

阅读 的输出sysctl -a,我发现信息并不直接与任何特定进程相关,而是与系统或内核相关。

那么,我如何在 macOS 等 UNIX 变体上sysctl读取通常存在于 Linux 发行版中的信息?/proc/self

例如,我想进入/proc/self/mapsmacOS。

答案1

您对 sysctl 主要包含系统范围参数的观察是恰当的。它也与名称有关sysctl(暗示 SYStem ConTroL),并且手册页sysctl - get or set kernel state对“ .”的描述

一些 BSD 系统确实提供了可选的procfs文件系统支持,可以安装在 下/proc,例如 FreeBSD:

# mount -t procfs procfs /proc

它提供了一些功能,但最常用于在模拟模式下运行 Linux 二进制文件时的兼容性目的,而不是用于对特定本机 BSD 进程的运行时统计信息进行明确查询。不幸的是,procfs据我所知,OS X 不支持文件系统。

更一般地说,BSD 系统不使用/proc,因此使用什么来替换基于特定的查询的答案/proc会根据特定查询的不同而有所不同。鉴于您最近对帖子的编辑,您可能会发现此命令有助于显示特定进程的内存使用情况:

$ sudo vmmap $$

相关内容