使用getrlimit(RLIMIT_MEMLOCK),可以獲得進程可以分配的鎖定內存的數量(mlock()或mlockall())。在進程中鎖定了多少內存
但如何檢索當前鎖定的內存量?
例如,getrusage()沒有返回任何信息。
在Linux下,可以讀取/ proc/self/status並從VmLck開始的行中提取鎖定的內存量。
是否有一種可移植的方式來檢索在Linux,* BSD和其他POSIX兼容系統上工作的鎖定內存量?
使用getrlimit(RLIMIT_MEMLOCK),可以獲得進程可以分配的鎖定內存的數量(mlock()或mlockall())。在進程中鎖定了多少內存
但如何檢索當前鎖定的內存量?
例如,getrusage()沒有返回任何信息。
在Linux下,可以讀取/ proc/self/status並從VmLck開始的行中提取鎖定的內存量。
是否有一種可移植的方式來檢索在Linux,* BSD和其他POSIX兼容系統上工作的鎖定內存量?
您可能需要檢查每個系統並相應地執行它。在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"
}
更短的格式:FILE * fp = fopen(「/ proc/self/status」,「r」); – milton 2012-09-25 21:32:32
POSIX指定如果未實施調用,則對於mlock和mlockall的調用將失敗並顯示ENOSYS。這意味着沒有保證便攜式界面的鎖定/解鎖,在可保證實施的意義上便攜。也。沒有POSIX指定的方法來枚舉進程內存的鎖定頁面。 – 2011-04-25 18:22:36