【问题标题】:How much memory locked in a process一个进程锁定了多少内存
【发布时间】:2011-04-23 05:27:55
【问题描述】:

使用 getrlimit(RLIMIT_MEMLOCK),可以获得一个进程可以分配的允许的锁定内存量(mlock() 或 mlockall())。

但是如何找回当前锁定的内存量呢?

例如,getrusage() 没有返回任何信息。

在 Linux 下,可以读取 /proc/self/status 并从 VmLck 开头的行中提取锁定的内存量。

是否有一种可移植的方式来检索适用于 Linux、*BSD 和其他 POSIX 兼容系统的锁定内存量?

【问题讨论】:

  • POSIX 指定调用 mlock 和 mlockall 如果未实现调用将失败并出现 ENOSYS。这意味着没有保证用于锁定/解锁的便携式接口,在保证实现的意义上是便携式的。还。没有 POSIX 指定的方法来枚举进程内存的锁定页。

标签: c linux unix posix bsd


【解决方案1】:

您可能需要检查每个系统并相应地实施。在 Linux 上:

cat /proc/$PID/status | grep VmLck

您可能需要在 C 中执行相同的操作(逐行阅读 /proc 并搜索 VmLck),因为此信息是在我没有的函数 task_mem(在 array.c)中创建的不认为你可以直接访问。比如:

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>

char cwd[PATH_MAX];
sprintf(cwd, "/proc/%d/status", getpid());

FILE* fp = fopen(cwd, "r");
if(!fp) {
    exit(EXIT_FAILURE);
}

while((read = getline(&line, &len, fp)) != -1) {
    // search for line starting by "VmLck"
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多