緊接上文,接下來就是獲取進程的句柄數,句柄就是windows進程中各種對象的標識,一般應用程序會通過句柄來執行各種操作,通過監控設備的句柄,我們可以大致判斷出進程是否存在異常,比如句柄泄漏,會導致系統卡頓,死機。 看需要用到系統API函數:
GetProcessHandleCount函數:
BOOL GetProcessHandleCount(
HANDLE hProcess,
PDWORD pdwHandleCount
);
函數說明:檢索指定進程的打開句柄的數量
參數:hProcess:指定進程的句柄
pdwHandleCount:返回進程的句柄數
返回值:函數成功返回非0,失敗返回0.
詳見:https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-getprocesshandlecount
實現代碼如下:
DWORD getProcessHandleCount(LPCWSTR processName)
{
DWORD dwHandleCount;
DWORD dwHandleCountAll = 0;
std::vector<HANDLE> processHandleGroup = GetProcessHandle(processName);
printf("vector size is %d.\n",processHandleGroup.size());
if(0 == processHandleGroup.size())
{
return -2;
}
std::vector<HANDLE>::iterator it;
for(it=processHandleGroup.begin();it!=processHandleGroup.end();it++)
{
GetProcessHandleCount(*it, &dwHandleCount);
CloseHandle(*it);
dwHandleCountAll += dwHandleCount;
printf ("Current Process Handle count : %d\n", dwHandleCount);
}
return dwHandleCountAll;
}