ExitProcess

1 つのプロセスと、そのプロセスに所属するすべてのスレッドを終了させます。

VOID ExitProcess(
  UINT uExitCode   // すべてのスレッドに適用される終了コード
);

パラメータ

uExitCode
この関数を呼び出した結果終了される、1 つのプロセスとそのプロセスに所属するすべてのスレッドの終了コードを指定します。プロセスの終了コードを取得するには、GetExitCodeProcess 関数を使います。スレッドの終了コードを取得するには、GetExitCodeThread function 関数を使います。

戻り値

戻り値はありません。

解説

プロセスを終了するには、ExitProcess 関数を使うのが好ましい方法です。この関数は、終了処理が進行中であることを、プロセスにアタッチしている DLL へ通知します。TerminateProcess 関数を使ってプロセスを終了させると、このプロセスは、プロセスの終了を DLL へ通知しません。

アタッチされているすべての DLL が、プロセスの終了コードに基づいて適切な動作を行った後、この関数は現在のプロセスを終了させます。

プロセスを終了させると、次のことが発生します。

1.このプロセスが開いたすべてのオブジェクトハンドルが閉じられます。

2.プロセス内のすべてのスレッドが動作を終了します。

3.プロセスオブジェクトがシグナル状態になり、そのプロセスが終了するのを待っていたすべてのスレッドの条件を満たします。

4.プロセス内のすべてのスレッドがシグナル状態になり、それらのスレッドが終了するのを待っていたすべてのスレッドの条件を満たします。

5.プロセスの終了ステータスは、STILL_ACTIVE から、そのプロセスの終了コードへ変化します。

プロセスを終了させても、その子プロセスが終了することはありません。

プロセスを終了させても、必ずしもそれに対応するプロセスオブジェクトがシステムから削除されるわけではありません。プロセスに 1 つまたは複数のハンドルが割り当てられている場合、最後のハンドルを閉じると、プロセスオブジェクトが自動的に削除されます。

警告  DLL 内で ExitProcess 関数を呼び出すと、予期しないエラーまたはシステム エラーが発生する可能性があります。DLL から ExitProcess 関数を呼び出す場合には、どのアプリケーションまたはシステム コンポーネントが DLL を読み込むか、またこの対象の中での ExitProcess 関数の呼び出しが安全かどうかを確認してください。

ExitProcessExitThreadCreateThreadCreateRemoteThread の各関数、および CreateProcess 関数を呼び出した結果起動されるプロセスは、1 つのプロセス内で互いにシリアル化されます。1 つのアドレス空間内で一度に実施されるのは、これらのイベントのうちただ 1 つです。そのため、次の制約が適用されます。

•プロセスの起動と DLL の初期化を行うルーチンの中で新しいスレッドを作成することは可能ですが、そのプロセスに関係する DLL の初期化が終了するまでは、それらのスレッドは開始されません。

•1 つのプロセスの DLL 初期化ルーチンまたは DLL デタッチルーチンの中に一度に存在できるスレッドは、ただ 1 つです。

•特定のプロセスに対して ExitProcess 関数を実行すると、そのプロセスに関係する DLL 初期化ルーチンまたはデタッチルーチン内にスレッドが存在しなくなるまで、ExitProcess 関数は制御を返しません。

対応情報

Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダー:Winbase.h 内で宣言、Windows.h をインクルード
インポートライブラリ:Kernel32.lib を使用

参照

CreateProcess, CreateRemoteThread, CreateThread, ExitThread, GetExitCodeProcess, GetExitCodeThread, OpenProcess, TerminateProcess

表示: