注:唯一のメモ帳などのWin32デスクトップアプリケーションのためのAssignProcessToJobObjectが適用され、計算が適用されません
次のデモでは、ジョブに割り当てられたメモ帳ハンドルに、そしてTerminateJobObject統一キルであります
#define _CRT_SECURE_NO_WARNINGS する#include <iostreamの> の#include <windows.hに> 使って 名前空間をSTD。 BOOL ExecuteSoftware(HANDLE * hSoftwareJob、CHAR *名前、constの int型countExecute)。 空KillProcess(HANDLE hSoftwareJob)。 int型のmain() { HANDLEのnotepadJob。 const int型 SIZE_NOTE = 3 ; notepadJob = CreateJobObject(NULL、NULL); 裁判所未満 << 「ワードパッド\ n個の実行」。 もし(!ExecuteSoftware(&notepadJob、const_castを< CHAR *>(" メモ帳" )、SIZE_NOTE)) { coutの << " すべてのプロセスを実行できません\ n個" ; スリープ(1500 ); } COUT << " キリンググループ\ n " 。 KillProcess(notepadJob)。 スリープ(2500 ); リターン 0 ; } BOOL ExecuteSoftware(HANDLE * hSoftwareJob、CHAR *名、CONST INT countExecute) { STARTUPINFO SI; LPTSTR lpszSystemInfo; PROCESS_INFORMATIONのパイ。 TCHAR tchBuff [MAX_PATH + 1 ]。 lpszSystemInfo = tchBuff。 GetSystemDirectory(lpszSystemInfo、MAX_PATH + 1 )。 wsprintf(tchBuff、" %sの\\%S " 、lpszSystemInfo、名); ZeroMemory(&SI、はsizeof (SI))。 si.cb = はsizeof (SI)。 ZeroMemory(&PI、はsizeof (PI))。 以下のために(int型私は= 0 ; I <countExecute;私は++) { 場合(のCreateProcess(NULL、tchBuff、NULL、NULL、FALSE、CREATE_BREAKAWAY_FROM_JOB、NULL、NULL、&SI、&!PI))// CREATE_BREAKAWAY_FROM_JOB是必需的 { リターン はfalse ; } 他 { AssignProcessToJobObject( * hSoftwareJob、pi.hProcess)。 INT ERR = のGetLastError()。 } } 戻り 真。 } ボイドKillProcess(HANDLE hSoftwareJob) { TerminateJobObject(hSoftwareJob、0 ); int型 ERR = のGetLastError()。 }
あなたが電卓openprocessは、ハンドルを取得し、その後AssignProcessToJobObjectにハンドルを渡す使用している場合、また、プロセスを殺すTerminateJobObjectことができることは興味深いです。
しかし、試験後のCreateProcess後のPIDパスopenprocessを取得する場合、新たなハンドルが使用されません取得、あること、pidが同じではありません見ることのCreateProcess GET processidをタスクマネージャを見つけました。