Объект задания


Объект задания (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, вызов завершится ошибкой. Если процесс не был предназначен, чтобы быть связанным с заданием, этот сбой может быть неожиданным.

Назад в оглавление темы
На главную страницу темы

Hosted by uCoz