|
감사합니다~^^
분명 어딘가 새는 곳이 있는것 같았는데..
그렇게 찾아봐도 안 보이더니 거기 있는줄도 모르고..^^;
그럼 다른 버그들을 찾아서..~~^^
장성호 님이 쓰신 글 :
: 코딩에 버그가 있네요
: 찾지 못하고 그냥 넘어간느 동안 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;
: : }
: :
: :
: :
: :
: :
: : 다음과 같은 소스로 프로세스 정보들을 가져와서 프로세스를 관리하는데
: : 이 부분을 계속 돌리다 보면 핸들갯수가 무한정 증가합니다.
: :
: : 많이 보진 못했지만 몇억개에서 몇십억개 까지 증가하는 것 같은데..ㅜㅜ
: :
: : 이 핸들들을 어떻게 해야하나요?
: : 고수님들 좀 부탁드려요..
|