複数のプロセスを同時に強制終了(C言語)

説明:

メモ帳を複数個同時に起動し、それらを同一のジョブオブジェクトに関連付ける。起動後10秒が経過したら、TerminateJobObjectを使用することにより、三つのメモ帳を同時に終了する。(このような処理を行いたいときは、SetInformationJobObjectでJobObjectBasicLimitInformationを設定することによっても可能)

キーワード:

CreateJobObject, AssignProcessToJobObject, TerminateJobObject

サンプルコード:

void ExitAllNotePad()
{
	HANDLE hJob;
	HANDLE hProcess[3];
	int i;
	STARTUPINFO si;
	PROCESS_INFORMATION pi;

	si.cb = sizeof(si);
	si.lpReserved = NULL;
	si.lpDesktop = NULL;
	si.lpTitle = NULL;
	si.dwFlags = 0;
	si.cbReserved2 = 0;
	si.lpReserved2 = NULL;

	/* ジョブオブジェクトの作成 */
	hJob = CreateJobObject(NULL, "Test Job Object");

	/* メモ帳を三つ起動 */
	for(i=0; i<3; i++) {
		CreateProcess(NOTEPAD_PATH, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
		hProcess[i] = pi.hProcess;
	}

	/* 起動したメモ帳をジョブオブジェクトに関連付ける */
	for(i=0; i<3; i++) AssignProcessToJobObject(hJob, hProcess[i]);

	/* 十秒間待機 */
	printf("10秒待機...");
	Sleep(10000);

	/* 三つのメモ帳をすべて終了 */
	TerminateJobObject(hJob, -1);

	/* ジョブオブジェクトの破棄 */
	CloseHandle(hJob);
}
(original text:1999/01/28 更新)

本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。