Объект задания
Объект задания (job object)
дает возможность управления группой процессов как модулем программы. Объекты задания - именованные, защищенные, совместно используемые объекты, которые управляют атрибутами процессов, связанных с ними. Операции, выполненные на объекте задания, воздействуют на все процессы, связанные с объектом задания.Чтобы создать объект задания, используйте функцию
CreateJobObject. Когда задание создано, еще нет никаких связанных с ним процессов. Чтобы связать процесс с заданием, используйте функцию AssignProcessToJobObject. После того, как Вы свяжете процесс с заданием, эта связь не может быть разорвана. По умолчанию, процессы, созданные процессом, связанным с заданием (дочерние процессы), также связываются с заданием. Если задание имеет дополнительное ограничение JOB_OBJECT_LIMIT_BREAKAWAY_OK, а процесс был создан с флажком CREATE_BREAKAWAY_FROM_JOB, его дочерние процессы не связываются с заданием. Если задание имеет дополнительное ограничение JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK, никакие дочерние процессы не связываются с заданием.Чтобы выяснить, запускается ли процесс в задании, используйте функцию
IsProcessInJob.Задание может предписывать ограничения каждому связанному процессу, типа размера рабочего комплекта, приоритета процесса, срок окончания задания и так далее. Чтобы установить ограничения для объекта задания, используйте функцию
SetInformationJobObject. Если процесс, связанный с заданием, пытается увеличить свой размер рабочей области или приоритет, вызовы функции молча игнорируются.Объект задания записывает и основную информацию учета для всех с ним связанных процессов, включая и те, которые завершили работу. Чтобы извлечь эту информацию учета, используйте функцию
QueryInformationJobObject.Чтобы завершать работу все процессов, в настоящее время связанных с объектом задания, используйте функцию
TerminateJobObject.Чтобы закрыть дескриптор объекта задания, используйте функцию
CloseHandle. Объект задания разрушается тогда, когда будет закрыт его последний дескриптор. Если там запущены процессы, все еще связанные с заданием, когда объект разрушается, они будут продолжать запускаться даже после того, как задание разрушено.Если инструментальное программное средство должно управлять деревом процессов, которое использует объекты задания, и инструментальное программное средство, и члены дерева процессов должны сотрудничать. Используйте один из ниже перечисленных параметров:
Инструментальное программное средство может воспрепятствовать отрыву любого вида. При этом параметре, инструментальное программное средство может контролировать полностью дерево процессов. Однако, если процесс, связанный с заданием попробует вызывать
AssignProcessToJobObject, вызов завершится ошибкой. Если процесс не был предназначен, чтобы быть связанным с заданием, этот сбой может быть неожиданным.