CreateJobObject ジョブオブジェクトの作成

Cの宣言:

HANDLE CreateJobObject(
	LPSSECURITY_ATTRIBUTE SecurityAttributes,
	LPCTSTR JobName);

説明:

JobNameで指定した名前を持つジョブオブジェクトを作成する。すでにJobNameで指定した名前を持つジョブオブジェクトが存在する場合、そのジョブオブジェクトをオープンし、ハンドルを返す。

この関数はNT5.0で使用可能。

JobNameに指定する名前は、同期オブジェクトと同じ名前空間を使用していることに注意。JobNameにはNULLを指定可能。その場合、名前無しジョブオブジェクトが作成される。

作成したジョブオブジェクトをクローズするには、CloseHandleを使用する。

引数の意味は以下の通り。
SecurityAttributes 作成するジョブオブジェクトのセキュリティ属性。
JobName 作成するジョブオブジェクトの名前。

戻り値は、作成またはオープンしたジョブオブジェクトのハンドルである。関数の実行に失敗した場合、NULLが返される。

Cのサンプル:

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

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