プロセスのメモリ情報の取得(C言語)
説明:
現在起動している全てのプロセスのメモリ情報を取得し、結果を表示する。
キーワード:
EnumProcesses, EnumProcessModules, GetModuleBaseName, GetProcessMemoryInfo
サンプルコード:
/* 現在起動しているプロセスのメモリ情報を表示 */
void DispMemInfos()
{
DWORD ProcessIDs[1000];
DWORD ProcessNum;
DWORD ReturnSize;
DWORD i;
HANDLE hProcess;
PROCESS_MEMORY_COUNTERS MemInfo;
HANDLE hModule;
char ModuleName[1000];
BOOL bResult;
/* プロセスIDの一覧と数を取得 */
EnumProcesses(ProcessIDs, 1000 * sizeof(DWORD), &ReturnSize);
ProcessNum = ReturnSize / sizeof(DWORD);
for(i=0; i<ProcessNum; i++) {
printf("process id: %x\n", ProcessIDs[i]);
/* プロセスハンドルの取得 */
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, ProcessIDs[i]);
if(hProcess != NULL) { /* 取得成功 */
/* プロセスのメインモジュールのハンドルを取得 */
bResult = EnumProcessModules(hProcess, &hModule, sizeof(HMODULE), &ReturnSize);
if(bResult) { /* 取得成功 */
/* メインモジュールの名前を表示 */
GetModuleBaseName(hProcess, hModule, ModuleName, 1000);
printf("\t名前: %s\n", ModuleName);
}
/* プロセスのメモリ情報を取得 */
GetProcessMemoryInfo(hProcess, &MemInfo, sizeof(MemInfo));
/* 結果の表示 */
printf("\tページフォールト数: %d\n", MemInfo.PageFaultCount);
printf("\t最大ワーキングセットサイズ: %d\n", MemInfo.PeakWorkingSetSize);
printf("\tワーキングセットサイズ: %d\n", MemInfo.WorkingSetSize);
printf("\t最大ページドプール使用サイズ: %d\n", MemInfo.QuotaPeakPagedPoolUsage);
printf("\tページドプール使用サイズ: %d\n", MemInfo.QuotaPagedPoolUsage);
printf("\t最大非ページドプール使用サイズ: %d\n", MemInfo.QuotaPeakNonPagedPoolUsage);
printf("\t非ページドプール使用サイズ: %d\n", MemInfo.QuotaNonPagedPoolUsage);
printf("\tページングファイル使用サイズ: %d\n", MemInfo.PagefileUsage);
printf("\t最大ページングファイル使用サイズ: %d\n", MemInfo.PeakPagefileUsage);
CloseHandle(hProcess);
} else {
printf("\tオープン失敗.\n");
}
}
}
(original text:1999/01/06 更新)
本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。