프로세스가 자기 자신을 종료하는 가장 간단한 방법
WM_CLOSE 메시지 보내기
DestroyWindow() 로 메인 윈도우 파괴
WM_DESTROY 에서 PostQuitMessage 를 호출하여 메시지 루프를 종료
이런 방법들에 의해 WinMain이 리턴되면 다음 함수를 호출하여 정리 작업 수행
VOID ExitProcess( UINT uExitCode );
이 함수가 호출되면 프로세스는 정리 작업에 들어가 즉각 종료
프로세스가 종료될 때는 다음의 작업이 진행
1, 프로세스와 연결된 모든 DLL을 종료시키기 위해 각 DLL의 DllMain 함수가 호출되며 DLL들은 스스로 정리작업
2. 모든 열려진 핸들을 닫는다
3. 실행중인 모든 스레드를 종료한다
4. 프로세스 커널 객체와 스레드 객체는 신호상태가 되며 이 객체를 기다리는 다른 프로세스는 대기 상태를 해제
5. 프로세스의 종료 코드는 STILL_ACTIVE 에서 ExitProcess() 가 지정한 종료값
다음 함수도 프로세스를 종료 시킬 수 있음
BOOL TerminateProcess( HANDLE hProcess, UINT uExitCode );
이 함수는 ExitProcess에 비해 종료 대상이 되는 프로세스의 핸들을 인수로 가짐
자기 자신이 아닌 다른 프로세스를 강제로 종료 시킬 수 있음
이 함수는 연결된 DLL에게 종료 사실이 통지 되지 않음
만약 DLL에서 대량의 메모리를 할당해 놓았거나 파일을 저장하지 않은 채로 가지고 있는 상황에서 이 함수로 강제로 프로세스를 종료한다면 정보를 잃어버릴 수도 있음
대상 프로세스는 자신이 종료된다는 것을 알지 못하며 어떠한 신호도 받지 못하므로 이저장 문서는 잃어버릴 것임
이 함수를 정상적인 프로세스의 종료에 사용하는 것은 바람직하지 않으며 어쩔 수 없이 강제로 종료해야 할 경우에만 사용
작업 관리자가 응답이 없는 프로세스를 강제 종료할 때 이 함수를 사용
댓글