Sdílet prostřednictvím


Vnořené úlohy

Aplikace může ke správě podmnožina procesů použít vnořené úlohy. Vnořené úlohy také umožňují aplikaci, která používá úlohy k hostování jiných aplikací, které také používají úlohy.

Windows 7, Windows Server 2008 R2, Windows XP s aktualizací SP3, Windows Server 2008, Windows Vista a Windows Server 2003: proces A lze přidružit pouze k jedné úloze. Vnořené úlohy byly zavedeny ve Windows 8 a Windows Serveru 2012.

Toto téma obsahuje přehled vnoření úloh a chování vnořených úloh:

Obecné informace o úlohách a objektech úloh naleznete v tématu Objekty úloh.

Hierarchie vnořených úloh

Vnořené úlohy mají vztah nadřazený-podřízený, ve kterém každá podřízená úloha obsahuje podmnožinu procesů v nadřazené úloze. Pokud je proces, který je již v úloze přidán do jiné úlohy, jsou úlohy ve výchozím nastavení vnořené, pokud systém může vytvořit platnou hierarchii úloh a žádná úloha nenastaví limity uživatelského rozhraní (SetInformationJobObject s JobObjectBasicUIRestrictions).

Obrázek 1 ukazuje hierarchii úloh, která obsahuje strom procesů označených jako P0 až P7. Úloha 1 je nadřazenou úlohou job 2 a Job 4 a je to nadřazená job 3. Úloha 2 je bezprostřední nadřazená úlohy 3; Úloha 3 je bezprostřední dítě úlohy 2. Úlohy 1, 2 a 3 tvoří řetězu úloh, ve kterém jsou úlohy 1 a 2 nadřazený řetěz pracovních pozic úlohy 3. Koncová úloha v řetězci úloh je okamžitá úloha procesů v této úloze. Na obrázku 1 je úloha 3 okamžitou úlohou procesů P2, P3 a P4.

obrázek 1. vnořená hierarchie úloh, která obsahuje strom procesu

Vnořené úlohy lze také použít ke správě skupin partnerských procesů. V hierarchii úloh zobrazené na obrázku 2 je úloha 1 nadřazenou úlohou úlohy 2. Všimněte si, že hierarchie úloh může obsahovat pouze část stromu procesu. Na obrázku 2 není P0 v hierarchii, ale podřízené procesy P1 až P5 jsou.

obrázek 2. vnořená hierarchie úloh, která obsahuje partnerské procesy

Vytvoření vnořené hierarchie úloh

Procesy v hierarchii úloh jsou buď explicitně přidružené k objektu úlohy pomocí funkce AssignProcessToJobObject nebo implicitně přidružené během vytváření procesu, stejně jako u samostatných úloh. Pořadí vytváření úloh a procesů určuje, jestli je možné vytvořit hierarchii.

Chcete-li vytvořit hierarchii úloh pomocí explicitního přidružení, musí být všechny objekty úloh vytvořeny pomocí CreateJobObject, pak AssignProcessToJobObject musí být volány vícekrát, aby každý proces přidružil ke každé úloze, do které by měl patřit. Pokud chcete zajistit, aby byla hierarchie úloh platná, nejprve přiřaďte všechny procesy k úloze v kořenovém adresáři hierarchie a pak přiřaďte podmnožinu procesů k objektu okamžité podřízené úlohy atd. Pokud jsou procesy přiřazeny k úlohům v tomto pořadí, podřízená úloha bude mít během vytváření hierarchie vždy podmnožinu procesů v nadřazené úloze, což je nutné pro vnoření. Pokud jsou procesy přiřazeny k úlohům v náhodném pořadí, v určitém okamžiku bude podřízená úloha mít procesy, které nejsou ve své nadřazené úloze. To není povoleno vnořením a způsobí selhání AssignProcessToJobObject.

Pokud jsou procesy implicitně přidruženy k úloze během vytváření procesu, je podřízený proces přidružen ke každé úloze v řetězci úloh nadřazeného procesu. Pokud objekt okamžité úlohy umožňuje přerušení, podřízený proces se přeruší od objektu okamžité úlohy a od každé úlohy v nadřazené řetězové úloze, přesune hierarchii nahoru, dokud nedosáhne úlohy, která nepovoluje přerušení. Pokud objekt okamžité úlohy nepovolí přerušení, podřízený proces se nerozbije ani v případě, že úlohy v nadřazeného řetězu úloh umožňují.

Omezení úloh a oznámení pro vnořené úlohy

U určitých limitů prostředků určuje limit nastavený pro úlohy v nadřazené řetězové úloze efektivní limit vynucené pro podřízenou úlohu. Efektivní limit podřízené úlohy může být více omezující než limit nadřazeného objektu, ale nemůže být méně omezující. Pokud je například třída priority podřízené úlohy ABOVE_NORMAL_PRIORITY_CLASS a třída priority nadřazené úlohy je NORMAL_PRIORITY_CLASS, je efektivní limit pro procesy v podřízené úloze NORMAL_PRIORITY_CLASS. Pokud je však třída priority podřízené úlohy BELOW_NORMAL_PRIORITY_CLASS, je efektivní limit pro procesy v podřízené úloze BELOW_NORMAL_PRIORITY_CLASS. Efektivní limity se vynucují pro třídu priority, spřažení, poplatek za potvrzení, časový limit provádění pro jednotlivé procesy, limit třídy plánování a minimální a maximální pracovní sadu. Další informace o konkrétních omezeních prostředků najdete v tématu SetInformationJobObject.

Pokud dojde k určitým událostem, jako je vytvoření nového procesu nebo porušení limitu prostředků, odešle se zpráva na port dokončení vstupně-výstupních operací přidružených k úloze. Úloha se může také zaregistrovat, aby dostávala oznámení, když dojde k překročení určitých limitů. U úlohy, která není vnořená, se zpráva odešle na port dokončení vstupně-výstupních operací přidružených k úloze. U vnořené úlohy se zpráva odešle na každý port dokončení vstupně-výstupních operací přidružený k jakékoli úloze v nadřazené řetězu úloh úlohy, která zprávu aktivovala. Podřízená úloha nemusí mít přidružený port pro dokončení vstupně-výstupních operací pro zprávy, které se mají odesílat do portů pro dokončování vstupně-výstupních operací nadřazených úloh vyšších v řetězu úloh. Další informace okonkrétníchch JOBOBJECT_ASSOCIATE_COMPLETION_PORTch

Účtování prostředků pro vnořené úlohy

Informace o účtování prostředků pro vnořenou úlohu popisují použití všech procesů přidružených k dané úloze, včetně procesů v podřízených úlohách. Každá úloha v řetězci úloh proto představuje agregované prostředky používané vlastními procesy a procesy každé podřízené úlohy pod ní v řetězci úloh.

Ukončení vnořených úloh

Když je úloha v hierarchii úloh ukončena, systém ukončí procesy v této úloze a všechny její podřízené úlohy počínaje podřízenou úlohou v dolní části hierarchie. Za nadřazenou úlohu se účtují nevyřízené prostředky používané jednotlivými ukončenými procesy.

Popisovač úlohy musí mít JOB_OBJECT_TERMINATE přístupové právo, stejně jako u samostatných úloh.