|
코딩에 버그가 있네요
찾지 못하고 그냥 넘어간느 동안 open했던 process핸들을 Close하지 않네요
한줄만 추가합니다.
"//--> 수정한 부분... " 을 보세요
....
bool __fastcall TFrom::FindProcess(PPROCESS_INFORMATIONREC _Process_Info)
{
hsnapshot = NULL;
hopenprocess = NULL;
PROCESS_MEMORY_COUNTERS PMC;
PROCESSENTRY32 processinfo;
processinfo.dwSize = sizeof(processinfo);
hsnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hsnapshot == NULL)
{
CloseHandle(hopenprocess);
CloseHandle(hsnapshot);
return false;
}
bool status = Process32First(hsnapshot, &processinfo);
while(status)
{
hopenprocess = OpenProcess(PROCESS_ALL_ACCESS, false, processinfo.th32ProcessID);
DWORD nMomoryInfo = GetLastError();
if(strcmp(processinfo.szExeFile,_Process_Info->szExeName) == 0)
{
_Process_Info->PID = processinfo.th32ProcessID;
_Process_Info->nThreadsCnt = processinfo.cntThreads;
GetProcessMemoryInfo(hopenprocess, &PMC, sizeof(PROCESS_MEMORY_COUNTERS));
_Process_Info->nMomoruInfo = (DWORD)(PMC.WorkingSetSize / 1024);
CloseHandle(hopenprocess);
CloseHandle(hsnapshot);
return true;
}
else if(hopenprocess)CloseHandle(hopenprocess); ////////////////////////--> 수정한 부분...
status = Process32Next(hsnapshot, &processinfo);
}
CloseHandle(hopenprocess);
CloseHandle(hsnapshot);
return false;
: }
완전버그 님이 쓰신 글 :
: bool __fastcall TFrom::FindProcess(PPROCESS_INFORMATIONREC _Process_Info)
: {
: hsnapshot = NULL;
: hopenprocess = NULL;
:
: PROCESS_MEMORY_COUNTERS PMC;
:
: PROCESSENTRY32 processinfo;
:
: processinfo.dwSize = sizeof(processinfo);
: hsnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
: if (hsnapshot == NULL)
: {
: CloseHandle(hopenprocess);
: CloseHandle(hsnapshot);
: return false;
: }
: bool status = Process32First(hsnapshot, &processinfo);
: while(status)
: {
: hopenprocess = OpenProcess(PROCESS_ALL_ACCESS, false, processinfo.th32ProcessID);
: DWORD nMomoryInfo = GetLastError();
:
: if(strcmp(processinfo.szExeFile,_Process_Info->szExeName) == 0)
: {
: _Process_Info->PID = processinfo.th32ProcessID;
: _Process_Info->nThreadsCnt = processinfo.cntThreads;
:
: GetProcessMemoryInfo(hopenprocess, &PMC, sizeof(PROCESS_MEMORY_COUNTERS));
: _Process_Info->nMomoruInfo = (DWORD)(PMC.WorkingSetSize / 1024);
:
: CloseHandle(hopenprocess);
: CloseHandle(hsnapshot);
: return true;
: }
:
: status = Process32Next(hsnapshot, &processinfo);
: }
: CloseHandle(hopenprocess);
: CloseHandle(hsnapshot);
: return false;
: }
:
:
:
:
:
: 다음과 같은 소스로 프로세스 정보들을 가져와서 프로세스를 관리하는데
: 이 부분을 계속 돌리다 보면 핸들갯수가 무한정 증가합니다.
:
: 많이 보진 못했지만 몇억개에서 몇십억개 까지 증가하는 것 같은데..ㅜㅜ
:
: 이 핸들들을 어떻게 해야하나요?
: 고수님들 좀 부탁드려요..
|