структура 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
Флаги ограничения, которые действуют. Этот элемент представляет собой битовое поле, определяющее, используются ли другие элементы структуры. Можно указать любое сочетание следующих значений.
Значение | Значение |
---|---|
|
Устанавливает максимальное количество одновременно активных процессов, связанных с заданием. Элемент ActiveProcessLimit содержит дополнительные сведения. |
|
Заставляет все процессы, связанные с заданием, использовать одно и то же сходство процессора. Член Affinity содержит дополнительные сведения.
Если задание вложено, указанное сходство процессора должно быть подмножеством действующего сходства родительского задания. Если указанное сходство является надмножеством сходства родительского задания, оно игнорируется и используется сходство родительского задания. |
|
Если какой-либо процесс, связанный с заданием, создает дочерний процесс с помощью флага CREATE_BREAKAWAY_FROM_JOB , пока действует это ограничение, дочерний процесс не связывается с заданием.
Это ограничение требует использования структуры JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Его элемент BasicLimitInformation является JOBOBJECT_BASIC_LIMIT_INFORMATION структурой. |
|
Принудительно вызывает функцию SetErrorMode с флагом SEM_NOGPFAULTERRORBOX для каждого процесса, связанного с заданием.
Если возникает исключение и система вызывает функцию UnhandledExceptionFilter , отладчику будет предоставлена возможность действовать. Если отладчик отсутствует, функции возвращают EXCEPTION_EXECUTE_HANDLER. Обычно это приводит к завершению процесса с кодом исключения в качестве состояния выхода. Это ограничение требует использования структуры JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Его элемент BasicLimitInformation является JOBOBJECT_BASIC_LIMIT_INFORMATION структурой. |
|
Приводит к тому, что все процессы, связанные с заданием, ограничивают объем зафиксированной памяти на уровне всего задания. Если процесс пытается зафиксировать объем памяти, превышающий ограничение на уровне задания, он завершается ошибкой. Если объект задания связан с портом завершения, на порт завершения отправляется JOB_OBJECT_MSG_JOB_MEMORY_LIMIT сообщение.
Это ограничение требует использования структуры JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Его элемент BasicLimitInformation является JOBOBJECT_BASIC_LIMIT_INFORMATION структурой. Чтобы зарегистрироваться для получения уведомлений о превышении этого ограничения, позволяя процессам продолжать фиксировать память, используйте функцию SetInformationJobObject с информационным классом JobObjectNotificationLimitInformation . |
|
Устанавливает ограничение времени выполнения в пользовательском режиме для задания. Элемент PerJobUserTimeLimit содержит дополнительные сведения. Этот флаг нельзя использовать с JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME. |
|
Приводит к завершению всех процессов, связанных с заданием, при закрытии последнего дескриптора задания.
Это ограничение требует использования структуры JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Его элемент BasicLimitInformation является JOBOBJECT_BASIC_LIMIT_INFORMATION структурой. |
|
Сохраняет все ранее заданные ограничения времени задания. Если этот флаг установлен, вы можете установить ограничение времени для каждого задания один раз, а затем изменить другие ограничения в последующих вызовах. Этот флаг нельзя использовать с JOB_OBJECT_LIMIT_JOB_TIME. |
|
Заставляет все процессы, связанные с заданием, использовать один и тот же класс приоритета. Дополнительные сведения см. в разделе Приоритеты планирования. Элемент PriorityClass содержит дополнительные сведения.
Если задание является вложенным, класс эффективного приоритета является классом с наименьшим приоритетом в цепочке заданий. |
|
Приводит к тому, что все процессы, связанные с заданием, ограничивают зафиксированную память. Если процесс пытается зафиксировать объем памяти, превышающий ограничение для каждого процесса, он завершается ошибкой. Если объект задания связан с портом завершения, на порт завершения отправляется сообщение JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT .
Если задание является вложенным, эффективным ограничением памяти является наиболее строгий предел памяти в цепочке заданий. Это ограничение требует использования структуры JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Его элемент BasicLimitInformation является JOBOBJECT_BASIC_LIMIT_INFORMATION структурой. |
|
Устанавливает ограничение времени выполнения в пользовательском режиме для каждого активного в данный момент процесса и для всех будущих процессов, связанных с заданием. Элемент PerProcessUserTimeLimit содержит дополнительные сведения. |
|
Заставляет все процессы в задании использовать один и тот же класс планирования. Член SchedulingClass содержит дополнительные сведения.
Если задание является вложенным, класс эффективного планирования является самым низким классом планирования в цепочке заданий. |
|
Позволяет любому процессу, связанному с заданием, создавать дочерние процессы, не связанные с заданием.
Если задание вложено и его непосредственный объект задания позволяет отколоться, дочерний процесс отрывается от непосредственного объекта задания и от каждого задания в родительской цепочке заданий, перемещаясь вверх по иерархии до тех пор, пока не достигнет задания, которое не допускает отколоться. Если непосредственный объект задания не допускает отколоться, дочерний процесс не прерывается, даже если задания в его родительской цепочке заданий разрешают это. Это ограничение требует использования структуры JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Его элемент BasicLimitInformation является JOBOBJECT_BASIC_LIMIT_INFORMATION структурой. |
|
Позволяет процессам использовать подмножество сходства процессора для всех процессов, связанных с заданием. Это значение должно быть объединено с JOB_OBJECT_LIMIT_AFFINITY.
Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP: Этот флаг поддерживается начиная с Windows 7 и Windows Server 2008 R2. |
|
Заставляет все процессы, связанные с заданием, использовать одинаковые минимальные и максимальные размеры рабочих наборов. Элементы 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) |
См. также раздел
JOBOBJECT_END_OF_JOB_TIME_INFORMATION
JOBOBJECT_EXTENDED_LIMIT_INFORMATION