2011-04-23 55 views
10

使用getrlimit(RLIMIT_MEMLOCK),可以获得进程可以分配的锁定内存的数量(mlock()或mlockall())。在进程中锁定了多少内存

但如何检索当前锁定的内存量?

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

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

是否有一种可移植的方式来检索在Linux,* BSD和其他POSIX兼容系统上工作的锁定内存量?

+1

POSIX指定如果未实施调用,则对于mlock和mlockall的调用将失败并显示ENOSYS。这意味着没有保证便携式界面的锁定/解锁,在可保证实施的意义上便携。也。没有POSIX指定的方法来枚举进程内存的锁定页面。 – 2011-04-25 18:22:36

回答

3

您可能需要检查每个系统并相应地执行它。在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" 
} 
+0

更短的格式:FILE * fp = fopen(“/ proc/self/status”,“r”); – milton 2012-09-25 21:32:32