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. プロセス オブジェクトの状態が通知され、プロセスの終了を待機していたスレッドが満たされます。
プロセスで終了したスレッドの 1 つがロックを保持し、読み込まれた 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 を含む)
Library Kernel32.lib
[DLL] Kernel32.dll

関連項目

CreateProcess

CreateRemoteThread

CreateThread

ExitThread

GetExitCodeProcess

GetExitCodeThread

OpenProcess

プロセス関数とスレッド関数

処理

TerminateProcess

プロセスの終了