Поделиться через


структура JOBOBJECT_BASIC_LIMIT_INFORMATION (winnt.h)

Содержит основные сведения об ограничении для объекта задания.

Синтаксис

typedef struct _JOBOBJECT_BASIC_LIMIT_INFORMATION {
  LARGE_INTEGER PerProcessUserTimeLimit;
  LARGE_INTEGER PerJobUserTimeLimit;
  DWORD         LimitFlags;
  SIZE_T        MinimumWorkingSetSize;
  SIZE_T        MaximumWorkingSetSize;
  DWORD         ActiveProcessLimit;
  ULONG_PTR     Affinity;
  DWORD         PriorityClass;
  DWORD         SchedulingClass;
} JOBOBJECT_BASIC_LIMIT_INFORMATION, *PJOBOBJECT_BASIC_LIMIT_INFORMATION;

Члены

PerProcessUserTimeLimit

Если LimitFlags указывает JOB_OBJECT_LIMIT_PROCESS_TIME, этот элемент является ограничением времени выполнения в пользовательском режиме для каждого процесса в 100 наносекундных тактов. В противном случае этот элемент игнорируется.

Система периодически проверяет, накопило ли каждый процесс, связанный с заданием, больше времени в пользовательском режиме, чем заданное ограничение. Если это так, процесс завершается.

Если задание вложено, действующее ограничение является самым строгим ограничением в цепочке заданий.

PerJobUserTimeLimit

Если LimitFlags указывает JOB_OBJECT_LIMIT_JOB_TIME, этот член является ограничением времени выполнения в пользовательском режиме для каждого задания в 100 наносекундных тактов. В противном случае этот элемент игнорируется.

Система добавляет текущее время процессов, связанных с заданием, к этому пределу. Например, если установить это ограничение в 1 минуту и задание содержит процесс, который накопил 5 минут времени в пользовательском режиме, ограничение фактически будет равно 6 минутам.

Система периодически проверяет, превышает ли сумма времени выполнения в пользовательском режиме для всех процессов этот предел завершения задания. Если это так, выполняется действие, указанное в элементе EndOfJobTimeActionструктуры JOBOBJECT_END_OF_JOB_TIME_INFORMATION . По умолчанию все процессы завершаются, а код состояния имеет значение ERROR_NOT_ENOUGH_QUOTA.

Чтобы зарегистрироваться для получения уведомлений о превышении этого ограничения без завершения процессов, используйте функцию SetInformationJobObject с информационным классом JobObjectNotificationLimitInformation .

LimitFlags

Флаги ограничения, которые действуют. Этот элемент представляет собой битовое поле, определяющее, используются ли другие элементы структуры. Можно указать любое сочетание следующих значений.

Значение Значение
JOB_OBJECT_LIMIT_ACTIVE_PROCESS
0x00000008
Устанавливает максимальное количество одновременно активных процессов, связанных с заданием. Элемент ActiveProcessLimit содержит дополнительные сведения.
JOB_OBJECT_LIMIT_AFFINITY
0x00000010
Заставляет все процессы, связанные с заданием, использовать одно и то же сходство процессора. Член Affinity содержит дополнительные сведения.

Если задание вложено, указанное сходство процессора должно быть подмножеством действующего сходства родительского задания. Если указанное сходство является надмножеством сходства родительского задания, оно игнорируется и используется сходство родительского задания.

JOB_OBJECT_LIMIT_BREAKAWAY_OK
0x00000800
Если какой-либо процесс, связанный с заданием, создает дочерний процесс с помощью флага CREATE_BREAKAWAY_FROM_JOB , пока действует это ограничение, дочерний процесс не связывается с заданием.

Это ограничение требует использования структуры JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Его элемент BasicLimitInformation является JOBOBJECT_BASIC_LIMIT_INFORMATION структурой.

JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION
0x00000400
Принудительно вызывает функцию SetErrorMode с флагом SEM_NOGPFAULTERRORBOX для каждого процесса, связанного с заданием.

Если возникает исключение и система вызывает функцию UnhandledExceptionFilter , отладчику будет предоставлена возможность действовать. Если отладчик отсутствует, функции возвращают EXCEPTION_EXECUTE_HANDLER. Обычно это приводит к завершению процесса с кодом исключения в качестве состояния выхода.

Это ограничение требует использования структуры JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Его элемент BasicLimitInformation является JOBOBJECT_BASIC_LIMIT_INFORMATION структурой.

JOB_OBJECT_LIMIT_JOB_MEMORY
0x00000200
Приводит к тому, что все процессы, связанные с заданием, ограничивают объем зафиксированной памяти на уровне всего задания. Если процесс пытается зафиксировать объем памяти, превышающий ограничение на уровне задания, он завершается ошибкой. Если объект задания связан с портом завершения, на порт завершения отправляется JOB_OBJECT_MSG_JOB_MEMORY_LIMIT сообщение.

Это ограничение требует использования структуры JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Его элемент BasicLimitInformation является JOBOBJECT_BASIC_LIMIT_INFORMATION структурой.

Чтобы зарегистрироваться для получения уведомлений о превышении этого ограничения, позволяя процессам продолжать фиксировать память, используйте функцию SetInformationJobObject с информационным классом JobObjectNotificationLimitInformation .

JOB_OBJECT_LIMIT_JOB_TIME
0x00000004
Устанавливает ограничение времени выполнения в пользовательском режиме для задания. Элемент PerJobUserTimeLimit содержит дополнительные сведения. Этот флаг нельзя использовать с JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME.
JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
0x00002000
Приводит к завершению всех процессов, связанных с заданием, при закрытии последнего дескриптора задания.

Это ограничение требует использования структуры JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Его элемент BasicLimitInformation является JOBOBJECT_BASIC_LIMIT_INFORMATION структурой.

JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME
0x00000040
Сохраняет все ранее заданные ограничения времени задания. Если этот флаг установлен, вы можете установить ограничение времени для каждого задания один раз, а затем изменить другие ограничения в последующих вызовах. Этот флаг нельзя использовать с JOB_OBJECT_LIMIT_JOB_TIME.
JOB_OBJECT_LIMIT_PRIORITY_CLASS
0x00000020
Заставляет все процессы, связанные с заданием, использовать один и тот же класс приоритета. Дополнительные сведения см. в разделе Приоритеты планирования. Элемент PriorityClass содержит дополнительные сведения.

Если задание является вложенным, класс эффективного приоритета является классом с наименьшим приоритетом в цепочке заданий.

JOB_OBJECT_LIMIT_PROCESS_MEMORY
0x00000100
Приводит к тому, что все процессы, связанные с заданием, ограничивают зафиксированную память. Если процесс пытается зафиксировать объем памяти, превышающий ограничение для каждого процесса, он завершается ошибкой. Если объект задания связан с портом завершения, на порт завершения отправляется сообщение JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT .

Если задание является вложенным, эффективным ограничением памяти является наиболее строгий предел памяти в цепочке заданий.

Это ограничение требует использования структуры JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Его элемент BasicLimitInformation является JOBOBJECT_BASIC_LIMIT_INFORMATION структурой.

JOB_OBJECT_LIMIT_PROCESS_TIME
0x00000002
Устанавливает ограничение времени выполнения в пользовательском режиме для каждого активного в данный момент процесса и для всех будущих процессов, связанных с заданием. Элемент PerProcessUserTimeLimit содержит дополнительные сведения.
JOB_OBJECT_LIMIT_SCHEDULING_CLASS
0x00000080
Заставляет все процессы в задании использовать один и тот же класс планирования. Член SchedulingClass содержит дополнительные сведения.

Если задание является вложенным, класс эффективного планирования является самым низким классом планирования в цепочке заданий.

JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK
0x00001000
Позволяет любому процессу, связанному с заданием, создавать дочерние процессы, не связанные с заданием.

Если задание вложено и его непосредственный объект задания позволяет отколоться, дочерний процесс отрывается от непосредственного объекта задания и от каждого задания в родительской цепочке заданий, перемещаясь вверх по иерархии до тех пор, пока не достигнет задания, которое не допускает отколоться. Если непосредственный объект задания не допускает отколоться, дочерний процесс не прерывается, даже если задания в его родительской цепочке заданий разрешают это.

Это ограничение требует использования структуры JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Его элемент BasicLimitInformation является JOBOBJECT_BASIC_LIMIT_INFORMATION структурой.

JOB_OBJECT_LIMIT_SUBSET_AFFINITY
0x00004000
Позволяет процессам использовать подмножество сходства процессора для всех процессов, связанных с заданием. Это значение должно быть объединено с JOB_OBJECT_LIMIT_AFFINITY.

Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP: Этот флаг поддерживается начиная с Windows 7 и Windows Server 2008 R2.

JOB_OBJECT_LIMIT_WORKINGSET
0x00000001
Заставляет все процессы, связанные с заданием, использовать одинаковые минимальные и максимальные размеры рабочих наборов. Элементы MinimumWorkingSetSize и MaximumWorkingSetSize содержат дополнительные сведения.

Если задание вложено, фактический размер рабочего набора является наименьшим размером рабочего набора в цепочке заданий.

MinimumWorkingSetSize

Если LimitFlags указывает JOB_OBJECT_LIMIT_WORKINGSET, этот член представляет собой минимальный размер рабочего набора в байтах для каждого процесса, связанного с заданием. В противном случае этот элемент игнорируется.

Если параметр MaximumWorkingSetSize не имеет нуля, параметр MinimumWorkingSetSize не может быть равен нулю.

MaximumWorkingSetSize

Если LimitFlags указывает JOB_OBJECT_LIMIT_WORKINGSET, этот член является максимальным размером рабочего набора в байтах для каждого процесса, связанного с заданием. В противном случае этот элемент игнорируется.

Если параметр MinimumWorkingSetSize не имеет нуля, параметр MaximumWorkingSetSize не может быть равен нулю.

ActiveProcessLimit

Если LimitFlags указывает JOB_OBJECT_LIMIT_ACTIVE_PROCESS, этот член является активным ограничением процесса для задания. В противном случае этот элемент игнорируется.

Если вы пытаетесь связать процесс с заданием и в результате этого число активных процессов превысит это ограничение, процесс завершается и связь завершается сбоем.

Affinity

Если LimitFlags указывает JOB_OBJECT_LIMIT_AFFINITY, этот член является сходством процессоров для всех процессов, связанных с заданием. В противном случае этот элемент игнорируется.

Сходство должно быть подмножеством маски сходства системы, полученной путем вызова функции GetProcessAffinityMask . Это значение присваивается сходству каждого потока, но потоки могут впоследствии задавать свое сходство, если это подмножество указанной маски сходства. Процессы не могут задать собственную маску сходства.

PriorityClass

Если LimitFlags указывает JOB_OBJECT_LIMIT_PRIORITY_CLASS, этот член является классом приоритета для всех процессов, связанных с заданием. В противном случае этот элемент игнорируется.

Процессы и потоки не могут изменять класс приоритета. Вызывающий процесс должен включать привилегию SE_INC_BASE_PRIORITY_NAME .

SchedulingClass

Если LimitFlags указывает JOB_OBJECT_LIMIT_SCHEDULING_CLASS, этот член является классом планирования для всех процессов, связанных с заданием. В противном случае этот элемент игнорируется.

Допустимые значения: от 0 до 9. Используйте 0 для наименее благоприятного класса планирования по сравнению с другими потоками и 9 для наиболее благоприятного класса планирования по сравнению с другими потоками. По умолчанию это значение равно 5. Чтобы использовать класс планирования больше 5, вызывающий процесс должен включить привилегию SE_INC_BASE_PRIORITY_NAME .

Комментарии

Процессы по-прежнему могут очищать свои рабочие наборы с помощью функции SetProcessWorkingSetSize с (SIZE_T)-1, даже если используется JOB_OBJECT_LIMIT_WORKINGSET . Однако метод SetProcessWorkingSetSize не может изменять минимальный или максимальный размер рабочего набора процесса в объекте задания.

Система увеличивает число активных процессов при попытке связать процесс с заданием. Если ограничение превышено, система уменьшает число активных процессов только после завершения процесса и закрытия всех дескрипторов процесса. Таким образом, если у вас есть открытый дескриптор для процесса, который был завершен таким образом, вы не сможете связать новые процессы, пока дескриптор не будет закрыт, а число активных процессов не будет ниже ограничения.

Требования

   
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Верхняя часть winnt.h (включая Windows.h)

См. также раздел

GetProcessAffinityMask

JOBOBJECT_END_OF_JOB_TIME_INFORMATION

JOBOBJECT_EXTENDED_LIMIT_INFORMATION

JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION

QueryInformationJobObject

SetInformationJobObject

SetProcessWorkingSetSize