ExitProcess 함수(processthreadsapi.h)

호출 프로세스 및 모든 스레드를 종료합니다.

구문

void ExitProcess(
  [in] UINT uExitCode
);

매개 변수

[in] uExitCode

프로세스 및 모든 스레드에 대한 종료 코드입니다.

반환 값

없음

설명

GetExitCodeProcess 함수를 사용하여 프로세스의 종료 값을 검색합니다. GetExitCodeThread 함수를 사용하여 스레드의 종료 값을 검색합니다.

프로세스를 종료하면 다음이 발생합니다.

  1. 호출 스레드를 제외한 프로세스의 모든 스레드는 DLL_THREAD_DETACH 알림을 받지 않고 실행을 종료합니다.
  2. 1단계에서 종료된 모든 스레드의 상태는 신호가 됩니다.
  3. 로드된 모든 DLL(동적 링크 라이브러리)의 진입점 함수는 DLL_PROCESS_DETACH 사용하여 호출됩니다.
  4. 연결된 모든 DLL이 프로세스 종료 코드를 실행한 후 ExitProcess 함수는 호출 스레드를 포함하여 현재 프로세스를 종료합니다.
  5. 호출 스레드의 상태가 신호가 표시됩니다.
  6. 프로세스에서 연 모든 개체 핸들이 닫힙니다.
  7. 프로세스의 종료 상태 STILL_ACTIVE 프로세스의 종료 값으로 변경됩니다.
  8. 프로세스 개체의 상태가 신호를 받고 프로세스가 종료되기를 기다리던 스레드를 충족합니다.
프로세스에서 종료된 스레드 중 하나에 잠금이 있고 로드된 DLL 중 하나의 DLL 분리 코드가 동일한 잠금을 획득하려고 하면 ExitProcess 를 호출하면 교착 상태가 발생합니다. 반면 TerminateProcess를 호출하여 프로세스가 종료되는 경우 프로세스가 연결된 DLL은 프로세스 종료에 대한 알림을 받지 않습니다. 따라서 프로세스의 모든 스레드 상태를 모르는 경우 ExitProcess보다 TerminateProcess를 호출하는 것이 좋습니다. 애플리케이션의 기본 함수에서 반환하면 ExitProcess가 호출됩니다.

DLL에서 ExitProcess 를 호출하면 예기치 않은 애플리케이션 또는 시스템 오류가 발생할 수 있습니다. DLL을 로드할 애플리케이션 또는 시스템 구성 요소와 이 컨텍스트에서 ExitProcess 를 호출하는 것이 안전한 경우에만 DLL에서 ExitProcess 를 호출해야 합니다.

프로세스를 종료해도 자식 프로세스가 종료되지는 않습니다.

프로세스를 종료한다고 해서 반드시 운영 체제에서 프로세스 개체가 제거되는 것은 아닙니다. 프로세스의 마지막 핸들을 닫으면 프로세스 개체가 삭제됩니다.

예제

예를 들어 리디렉션된 입력 및 출력을 사용하여 자식 프로세스 만들기를 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 processthreadsapi.h(Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2의 Windows.h 포함)
라이브러리 Kernel32.lib
DLL Kernel32.dll

참고 항목

CreateProcess

CreateRemoteThread

CreateThread

ExitThread

GetExitCodeProcess

GetExitCodeThread

OpenProcess

프로세스 및 스레드 함수

프로세스

TerminateProcess

프로세스 종료