一个进程锁定了多少内存

Yan*_*aud 10 c unix linux bsd posix

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

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

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

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

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

Gio*_*hal 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"
}
Run Code Online (Sandbox Code Playgroud)