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

プロセスの終了