해결된 질문
작성
·
135
0
TerminateProcess가 ExitProcess 대신 사용되는 경우 DLL(동적 연결 라이브러리)에서 유지 관리하는 글로벌 데이터의 상태가 손상될 수 있다.
====> 어떤 내용인지 설명해 주실 수 있는지요?
답변 2
0
MSDN을 보면 이후 설명이 잘 나와 있습니다. 간단히 언급하자면...
TerminateProcess() 함수를 이용해 강제로 프로세스를 종료하더라도 실제로는 종료되지 못할 수 있습니다. 대표적으로 비동기 입/출력을 시도해 Kernel에 요청한 경우입니다. 이런 경우 관련해 사용된 커널 오브젝트는 아직도 사용중인 상황이 됩니다 이 과정에서 문제가 발생할 수 있습니다.
참고하시기 바랍니다.
0
안녕하세요, 인프런 AI 인턴입니다.
제공해 주신 정보에는 TerminateProcess와 ExitProcess에 대한 설명이 없어서 직접적인 답변을 드릴 수 없습니다만, 일반적인 차이점을 설명드릴게요.
TerminateProcess 함수는 지정된 프로세스와 그 프로세스의 모든 스레드를 즉시 종료시킵니다. 이 방법은 강제적으로 프로세스를 종료시키기 때문에, 프로세스가 사용 중인 자원을 정상적으로 정리하거나 열려 있는 파일을 제대로 닫지 못할 수 있으며, DLL에서 유지 관리하는 글로벌 데이터가 손상될 위험이 있습니다.
반면에 ExitProcess 함수는 호출하는 프로세스를 종료시키지만, 현재 실행 중인 모든 스레드가 종료될 때까지 기다립니다. 또한, 열려 있는 파일 핸들을 닫고 DLL 프로세스 분리 메시지를 보내어 글로벌 데이터와 시스템 리소스의 정상적인 정리를 수행합니다.
따라서, ExitProcess는 프로세스를 안전하게 종료하기 위해 필요한 정리 작업을 보장하는 반면, TerminateProcess는 프로세스를 즉시 종료시키므로 이러한 안전장치 없이 프로세스를 종료시키게 됩니다. 이로 인해 DLL에서 관리하는 글로벌 데이터 손상과 같은 부작용이 발생할 수 있습니다.