TerminateProcess

https://msdn.microsoft.com/ja-jp/library/ms684880.aspx https://msdn.microsoft.com/ja-jp/library/cc428944.aspx

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

BOOL TerminateProcess(
  HANDLE hProcess, // プロセスのハンドル
  UINT uExitCode   // プロセスの終了コード
);

パラメータ

hProcess
終了させるべきプロセスのハンドルを指定します。

Windows NT/2000:このハンドルに、PROCESS_TERMINATE アクセス権を割り当てておかなければなりません。詳細については、MSDN ライブラリの「」を参照してください。

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

戻り値

関数が成功すると、0 以外の値が返ります。

関数が失敗すると、0 が返ります。拡張エラー情報を取得するには、 関数を使います。

解説

TerminateProcess 関数は、プロセスを無条件に終了させます。特別な状況でのみこの関数を使ってください。ExitProcess 関数ではなく TerminateProcess 関数を使うと、DLL(ダイナミックリンクライブラリ)が管理しているグローバルデータは、整合性のない状態に陥る可能性があります。

この関数は、指定したプロセスに所属するすべてのスレッドを終了させ、そのプロセスも終了させます。しかし、終了処理が進行中であることを、そのプロセスにアタッチしている DLL へ通知しません。

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

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

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

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

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

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

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

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

対応情報

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

参照

ExitProcess, OpenProcess, GetExitCodeProcess, GetExitCodeThread

表示: