Структура JOBOBJECT_BASIC_LIMIT_INFORMATION содержит основную информацию об ограничении для объекта работы.
Синтаксис
typedef struct _JOBOBJECT_BASIC_LIMIT_INFORMATION { 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 |
Нет |
Замечания по платформе |
Не имеется |