c - 如何在不调用外部程序的情况下测量进程的内存使用情况

标签 c unix memory process linux-kernel

可以通过运行显示一个进程的内存使用情况:

$ ps -C processname -o size
 SIZE
 3808

有没有什么方法可以在不执行 ps(或任何外部程序)或读取 /proc 的情况下检索此信息?

最佳答案

在 Linux 系统上,可以通过读取 /proc/[pid]/statm 来查询进程的内存使用情况。其中 [pid] 是进程的 PID。如果一个进程想要查询自己的数据,它可以通过读取 /proc/self/statm 来实现。 man 5 proc说:

/proc/[pid]/statm

          Provides information about memory usage, measured in pages.  The
          columns are:

              size       total program size
                         (same as VmSize in /proc/[pid]/status)
              resident   resident set size
                         (same as VmRSS in /proc/[pid]/status)
              share      shared pages (from shared mappings)
              text       text (code)
              lib        library (unused in Linux 2.6)
              data       data + stack
              dt         dirty pages (unused in Linux 2.6)

您可以使用以下命令打开文件:fopen("/proc/self/statm", "r") 并阅读内容。

由于文件以“页面”形式返回结果,因此您还需要查找页面大小。 getpagesize ()返回页面的大小,以字节为单位。

关于c - 如何在不调用外部程序的情况下测量进程的内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11983672/

相关文章:

c - 填充二叉树的每个节点中的下一个右指针

java - Docker Java 内存使用情况

OpenGL 帧缓冲区附件泄漏 GPU 内存

c程序在unix上转储核心

shell "if"语句

javascript - 使用 JavaScript 在 HTML5 Canvas 上绘制大量点

c - C 中的 AVR - 将寄存器的值存储在变量中

c - GNU GCC 数学函数的精度要求?

c - 程序崩溃-段错误

unix - 使用数组中的值,键作为 awk 中列的子字符串