2011-04-23 21 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

相關問題