Сколько памяти заблокировано в процессе

Используя getrlimit (RLIMIT_MEMLOCK), можно получить разрешенное количество заблокированной памяти, которую может выделить процесс (mlock() или mlockall()).

Но как получить текущую заблокированную память?

Например, нет информации, возвращаемой getrusage().

В Linux можно читать /proc/self/status и извлекать объем заблокированной памяти из строки, начинающейся с VmLck.

Есть ли переносимый способ получить объем заблокированной памяти, который будет работать на Linux, * BSD и другие совместимые с POSIX системы?

Ответ 1

Вам, вероятно, потребуется проверить каждую систему и выполнить ее соответствующим образом. В Linux:

cat /proc/$PID/status | grep VmLck

Вам, вероятно, понадобится сделать то же самое в C (читайте /proc по очереди и выполните поиск VmLck), так как эта информация создается в функции task_memarray.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"
}