Megosztás a következőn keresztül:


Feladatobjektumok

A feladatobjektumok lehetővé teszik a folyamatok csoportjainak egységként való kezelését. A feladatobjektumok elnevezéssel ellátott, biztonságos, megosztható objektumok, amelyek a hozzájuk társított folyamatok attribútumait szabályozzák. A feladatobjektumon végrehajtott műveletek hatással vannak a feladatobjektumhoz társított összes folyamatra. Ilyenek például a korlátok kikényszerítése, például a munkakészlet mérete és a folyamat prioritása, vagy a feladathoz társított összes folyamat leállítása.

Feladatok létrehozása

Feladatobjektum létrehozásához használja a CreateJobObject függvényt. A feladat létrehozásakor a rendszer nem társít folyamatokat a feladathoz.

Egy folyamat feladathoz való társításához használja a AssignProcessToJobObject függvényt. Miután egy folyamat egy feladathoz van társítva, a társítás nem bontható fel. Egy folyamat több feladathoz is társítható a beágyazott feladatok hierarchiájában. További információ: Beágyazott feladatok.

Windows 7, Windows Server 2008 R2, Windows XP SP3, Windows Server 2008, Windows Vista és Windows Server 2003: Egy folyamat csak egy feladathoz társítható. A feladatok nem ágyazhatók be. A feladatok beágyazásának lehetősége a Windows 8-ban és a Windows Server 2012-ben lett hozzáadva.

A feladatobjektumok biztonsági leíróját a CreateJobObject függvény meghívásakor adhatja meg. További információ: Feladatobjektum biztonsági és hozzáférési jogosultságai.

Folyamatok kezelése a feladatokban

Miután egy folyamat társítva van egy feladattal, alapértelmezés szerint minden gyermekfolyamat, amelyet a CreateProcess használatával hoz létre, szintén a feladathoz lesz társítva. (A Win32_Process.Create használatával létrehozott gyermekfolyamatok nincsenek társítva a feladattal.) Ez az alapértelmezett viselkedés a feladat kiterjesztett JOB_OBJECT_LIMIT_BREAKAWAY_OK vagy JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK beállításával módosítható.

  • Ha a feladat kiterjesztett korlátot JOB_OBJECT_LIMIT_BREAKAWAY_OK, és a szülőfolyamat a CREATE_BREAKAWAY_FROM_JOB jelzővel lett létrehozva, akkor a szülőfolyamat gyermekfolyamatai nem lesznek társítva a feladattal.
  • Ha a feladat kiterjesztett korlátot JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK, akkor a feladathoz társított szülőfolyamatok gyermekfolyamatai nem lesznek társítva a feladattal. Nem szükséges, hogy a szülőfolyamatok a CREATE_BREAKAWAY_FROM_JOB jelzővel legyenek létrehozva.

Ha a feladat beágyazott, a hierarchia szülőfeladatainak külön beállításai befolyásolják, hogy a gyermekfolyamatok a hierarchia egy másik feladatához vannak-e társítva. További információ: Beágyazott feladatok.

Annak megállapításához, hogy egy folyamat fut-e egy feladatban, használja az IsProcessInJob függvényt.

A feladatobjektumhoz jelenleg társított összes folyamat leállításához használja a TerminateJobObject függvényt.

Feladatkorlátok és értesítések

A feladatok korlátozásokat kényszeríthetnek ki, például a munkakészlet méretét, a folyamat prioritását és a feladat befejezési időkorlátját a feladathoz társított összes folyamatra. Ha egy feladathoz társított folyamat megkísérli növelni a munkakészlet méretét vagy a folyamat prioritását a feladat által meghatározott korlátból, a függvényhívások sikeresek lesznek, de a rendszer csendben figyelmen kívül hagyja. A feladatok olyan korlátokat is beállíthatnak, amelyek a túllépéskor értesítést aktiválnak, de engedélyezik a feladat futtatását.

A feladatok korlátainak beállításához használja a SetInformationJobObject függvényt. A feladatokhoz beállítható lehetséges korlátok listáját az alábbi témakörökben találja:

A biztonsági korlátokat külön-külön kell beállítani a feladatobjektumhoz társított összes folyamathoz. További információ: Folyamatbiztonsági és hozzáférési jogok.

Windows XP SP3 és Windows Server 2003 rendszereken: A SetInformationJobObject függvénnyel biztonsági korlátozásokat állíthat be a feladatobjektumhoz társított összes folyamatra. A Windows Vista-tól kezdve a biztonsági korlátokat külön-külön kell beállítani a feladatobjektumhoz társított minden folyamatra.

Ha a feladat beágyazott, a hierarchiában lévő szülőfeladatok befolyásolják a feladatra érvényes korlátot. További információ: Beágyazott feladatok.

Ha a feladathoz társított I/O-befejezési port van, értesítéseket kaphat bizonyos feladatkorlátok túllépésekor. A rendszer üzeneteket küld a befejezési portra, ha túllép egy korlátot, vagy bizonyos egyéb események történnek. A befejezési port feladathoz való társításához használja a SetInformationJobObject függvényt a job object information class JobObjectAssociateCompletionPortInformation és egy JOBOBJECT_ASSOCIATE_COMPLETION_PORT struktúrára mutató mutatóval. Ezt akkor érdemes megtenni, ha a feladat inaktív, hogy csökkenjen azoknak a folyamatoknak az értesítései, amelyek állapota megváltozik a befejezési port társítása során.

A rendszer minden üzenetet közvetlenül a feladatból küld, mintha a feladat a PostQueuedCompletionStatus függvényt hívta volna. A szálnak a GetQueuedCompletionStatus függvénnyel kell figyelnie a befejezési portot az üzenetek felvételéhez. Vegye figyelembe, hogy az JobObjectNotificationLimitInformation információs osztályra vonatkozó korlátozások kivételével az üzenetek kézbesítése a befejező portra nem garantált; Egy üzenet sikertelensége nem feltétlenül jelenti azt, hogy az esemény nem történt meg. A JobObjectNotificationLimitInformation korlátokkal kapcsolatos értesítések garantáltan megérkeznek a befejezési portra. A lehetséges üzenetek listáját a JOBOBJECT_ASSOCIATE_COMPLETION_PORTcímű témakörben találja.

Feladatok erőforrás-nyilvántartása

A feladatobjektum az összes kapcsolódó folyamat alapvető könyvelési adatait rögzíti, beleértve a leállított folyamatokat is. A könyvelési adatok lekéréséhez használja a QueryInformationJobObject függvényt. A feladatokhoz karbantartott könyvelési információk listáját az alábbi témakörökben találja:

Ha a feladatobjektum beágyazott, a rendszer az egyes gyermekfeladatok könyvelési adatait összesíti a szülőfeladatban. További információ: Beágyazott feladatok.

Feladatobjektumok kezelése

A feladatobjektum állapota akkor lesz jelezve, ha az összes folyamat leáll, mert túllépte a megadott feladatvégési időkorlátot. Az esemény feladatobjektumának figyeléséhez használja WaitForSingleObject vagy WaitForSingleObjectEx.

Egy meglévő feladatobjektum leírójának beszerzéséhez használja az OpenJobObject függvényt, és adja meg az objektumnak a létrehozáskor megadott nevet. Csak nevesített feladatobjektumok nyithatóak meg.

Feladatobjektum-leíró bezárásához használja a CloseHandle függvényt. A feladat akkor lesz megsemmisítve, ha az utolsó leírója lezárult, és az összes társított folyamat leállt. Ha azonban a feladathoz meg van adva a JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE jelző, az utolsó feladatobjektum-leíró bezárása leállítja az összes társított folyamatot, majd megsemmisíti magát a feladatobjektumot. Ha egy beágyazott feladathoz meg van adva a JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE jelző, az utolsó feladatobjektum-leíró bezárása leállítja a feladathoz és annak alárendelt feladataihoz társított összes folyamatot a hierarchiában.

Feladatobjektumokat használó folyamatfa kezelése

A Windows 8-tól és a Windows Server 2012-től kezdve az alkalmazások beágyazott feladatok használhatják egynél több feladatobjektumot használó folyamatfát. A Windows 7, a Windows Server 2008 R2 vagy a Windows olyan korábbi verzióin futó alkalmazásoknak azonban, amelyek nem támogatják a beágyazott feladatokat, más módon kell kezelnie a folyamatfát.

Ha egy eszköznek feladatobjektumokat használó folyamatfát kell kezelnie, és beágyazott feladatok nem használhatók, akkor az eszköznek és a folyamatfa tagjainak együtt kell működnie. Használja az alábbi lehetőségek egyikét:

  • Használja a JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK korlátot. Ha az eszköz ezt a korlátot használja, nem képes teljes folyamatfát figyelni. Az eszköz csak a feladathoz hozzáadott folyamatokat figyelheti. Ha ezek a folyamatok gyermekfolyamatokat hoznak létre, azok nincsenek társítva a feladattal. Ebben a beállításban a gyermekfolyamatok más feladatobjektumokhoz is társíthatók.

  • Használja a JOB_OBJECT_LIMIT_BREAKAWAY_OK korlátot. Ha az eszköz ezt a korlátot használja, a teljes folyamatfát figyelheti, kivéve azokat a folyamatokat, amelyeket a fa bármely tagja kifejezetten megszakít a fától. A fa egy tagja létrehozhat egy gyermekfolyamatot egy új feladatobjektumban úgy, hogy meghívja a CreateProcess függvényt a CREATE_BREAKAWAY_FROM_JOB jelzővel, majd meghívja a AssignProcessToJobObject függvényt. Ellenkező esetben a tagnak kezelnie kell azokat az eseteket, amikor AssignProcessToJobObject meghiúsul.

    A CREATE_BREAKAWAY_FROM_JOB jelzőnek nincs hatása, ha az eszköz nem figyeli a fát. Ezért ez az előnyben részesített lehetőség, de előzetes ismereteket igényel a figyelt folyamatokról.

  • A JOB_OBJECT_LIMIT_BREAKAWAY_OK és a JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK korlát beállításával bármilyen szakítást megelőzhet. Ebben a beállításban az eszköz a teljes folyamatfát figyelheti. Ha azonban egy gyermekfolyamat megpróbálja társítani magát vagy egy másik gyermekfolyamatot egy feladathoz AssignProcessToJobObjectmeghívásával, a hívás sikertelen lesz. Ha a folyamatot úgy tervezték, hogy egy adott feladathoz legyen társítva, ez a hiba megakadályozhatja a folyamat megfelelő működését.