TerminateJobObjectは使用することです

注:唯一のメモ帳などの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をタスクマネージャを見つけました。

おすすめ

転載: www.cnblogs.com/strive-sun/p/12408159.html