WSP19

LJM·2023년 8월 2일
0

컴퓨터지식

목록 보기
20/41

Usage Count와 CloseHandle

Usage Count 감소하는 과정을 알아보자

자식프로세스의 작업 종료후 커널 오브젝트 상태이다
UsageCount가 하나 줄어들었다
커널오브젝트가 아직 소멸되지 않는다

부모프로세스에서 CloseHandle 함수를 호출하면
UsageCount 하나 감소한다
UsageCount 가 0 이되면서 소멸된다

CloseHandle함수는 핸들을 반환하면서 커널 오브젝트의 UsageCount를 하나 감소시킨다.

프로세스 강제종료는 TerminateProcess 이다

Calculator.cpp의 문제점 그리고 해결책

Pseudo code

//Calculator2.cpp 부모프로세스

CreateProcess("calc.exe");//자식프로세스 생성
//CloseHandle(pi.hProcess); UsageCount 1 줄이기
//CloseHandle(pi.hThread); UsageCount 1 줄이기


계산기 프로세스(자식프로세스) 가 종료되면 UsageCount=1 이 된다 이것이 문제점이다. 커널오브젝트가 소멸되지 않은 상태로 프로그램 사용자가 계산기를 생성하게 되면 다음과 같이 된다

커널 오브젝트가 사라지지 않고 누적되고 있다

해결방법은 계산기프로세스를 생성하고 CloseHandle을 호출하는 것이다

profile
게임개발자 백엔드개발자

0개의 댓글