Usage Count 감소하는 과정을 알아보자
자식프로세스의 작업 종료후 커널 오브젝트 상태이다
UsageCount가 하나 줄어들었다
커널오브젝트가 아직 소멸되지 않는다
부모프로세스에서 CloseHandle 함수를 호출하면
UsageCount 하나 감소한다
UsageCount 가 0 이되면서 소멸된다
CloseHandle함수는 핸들을 반환하면서 커널 오브젝트의 UsageCount를 하나 감소시킨다.
프로세스 강제종료는 TerminateProcess 이다
Pseudo code
//Calculator2.cpp 부모프로세스
CreateProcess("calc.exe");//자식프로세스 생성
//CloseHandle(pi.hProcess); UsageCount 1 줄이기
//CloseHandle(pi.hThread); UsageCount 1 줄이기
계산기 프로세스(자식프로세스) 가 종료되면 UsageCount=1 이 된다 이것이 문제점이다. 커널오브젝트가 소멸되지 않은 상태로 프로그램 사용자가 계산기를 생성하게 되면 다음과 같이 된다
커널 오브젝트가 사라지지 않고 누적되고 있다
해결방법은 계산기프로세스를 생성하고 CloseHandle을 호출하는 것이다