如何監控windows進程的句柄、內存和cpu(三)

緊接上文,接下來就是獲取進程的句柄數,句柄就是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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章