Структура JOBOBJECT_BASIC_LIMIT_INFORMATION


Структура JOBOBJECT_BASIC_LIMIT_INFORMATION содержит основную информацию об ограничении для объекта работы.

Синтаксис

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.

LimitFlags

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

Значение

Предназначение

JOB_OBJECT_LIMIT_ACTIVE_PROCESS

Устанавливает максимальное число одновременно активных процессов, связанных с заданием. 

JOB_OBJECT_LIMIT_AFFINITY

Заставляет все процессы, связанные с заданием использовать ту же самую родственность процессора. 

JOB_OBJECT_LIMIT_BREAKAWAY_OK

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

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

JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION

Вынуждает вызов к функции SetErrorMode с флажком SEM_NOGPFAULTERRORBOX для каждого процесса, связанного с заданием.

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

JOB_OBJECT_LIMIT_JOB_MEMORY

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

JOB_OBJECT_LIMIT_JOB_TIME

Устанавливает ограничение времени исполнения кода в непривилегированном режиме для задания. Этот флажок не может использоваться с JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME.

JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE

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

JOB_OBJECT_LIMIT_PRIORITY_CLASS

Заставляет все процессы, связанные с заданием использовать тот же самый класс приоритета. Для получения дополнительной информации, см. статью Приоритеты в обслуживании

JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME

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

JOB_OBJECT_LIMIT_PROCESS_MEMORY

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

JOB_OBJECT_LIMIT_PROCESS_TIME

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

JOB_OBJECT_LIMIT_SCHEDULING_CLASS

Заставляет все процессы в задании использовать тот же самый класс диспетчеризации обслуживания процессором.

JOB_OBJECT_LIMIT_WORKINGSET

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

JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK

Дает возможность любому процессу, связанному с заданием создавать дочерние процессы, которые не связаны с заданием.

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

MinimumWorkingSetSize

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

MaximumWorkingSetSize

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

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, даже когда используется JOB_OBJECT_LIMIT_WORKINGSET. Однако, Вы не можете использовать SetProcessWorkingSetSize, чтобы изменить минимальный или максимальный размер рабочего комплекта.

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

Смотри также

Краткий обзор Процессы и потоки, Структуры, используемые объектом задания, GetProcessAffinityMask, JOBOBJECT_END_OF_JOB_TIME_INFORMATION, JOBOBJECT_EXTENDED_LIMIT_INFORMATION QueryInformationJobObject, SetInformationJobObject, SetProcessWorkingSetSize

Размещение и совместимость JOBOBJECT_BASIC_LIMIT_INFORMATION

Windows. NET Server

Да

Windows XP

Да

Windows 2000

Да

Windows NT

Нет

Windows Me

Нет

Windows 98

Нет

Windows 95

Нет

Заголовочный файл

 

- объявлено в

Winnt.h

- включено в

Windows.h

Unicode

Нет

Замечания по платформе

Не имеется

 

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

Hosted by uCoz