estructura JOBOBJECT_BASIC_LIMIT_INFORMATION (winnt.h)
Contiene información de límite básica para un objeto de trabajo.
Sintaxis
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;
Miembros
PerProcessUserTimeLimit
Si LimitFlags especifica JOB_OBJECT_LIMIT_PROCESS_TIME, este miembro es el límite de tiempo de ejecución en modo usuario por proceso, en tics de 100 nanosegundos. De lo contrario, se omite este miembro.
El sistema comprueba periódicamente si cada proceso asociado al trabajo ha acumulado más tiempo de modo de usuario que el límite establecido. Si lo tiene, se termina el proceso.
Si el trabajo está anidado, el límite efectivo es el límite más restrictivo de la cadena de trabajos.
PerJobUserTimeLimit
Si LimitFlags especifica JOB_OBJECT_LIMIT_JOB_TIME, este miembro es el límite de tiempo de ejecución en modo usuario por trabajo, en tics de 100 nanosegundos. De lo contrario, se omite este miembro.
El sistema agrega la hora actual de los procesos asociados al trabajo a este límite. Por ejemplo, si establece este límite en 1 minuto y el trabajo tiene un proceso que ha acumulado 5 minutos de tiempo del modo de usuario, el límite aplicado realmente es de 6 minutos.
El sistema comprueba periódicamente si la suma del tiempo de ejecución del modo de usuario para todos los procesos es mayor que este límite de fin de trabajo. Si es así, se lleva a cabo la acción especificada en el miembro EndOfJobTimeAction de la estructura JOBOBJECT_END_OF_JOB_TIME_INFORMATION . De forma predeterminada, todos los procesos finalizan y el código de estado se establece en ERROR_NOT_ENOUGH_QUOTA.
Para registrarse para recibir notificaciones cuando se supere este límite sin terminar los procesos, use la función SetInformationJobObject con la clase de información JobObjectNotificationLimitInformation .
LimitFlags
Marcas de límite que están en vigor. Este miembro es un campo de bits que determina si se usan otros miembros de estructura. Se puede especificar cualquier combinación de los valores siguientes.
Valor | Significado |
---|---|
|
Establece un número máximo de procesos activos simultáneamente asociados al trabajo. El miembro ActiveProcessLimit contiene información adicional. |
|
Hace que todos los procesos asociados al trabajo usen la misma afinidad de procesador. El miembro Affinity contiene información adicional.
Si el trabajo está anidado, la afinidad de procesador especificada debe ser un subconjunto de la afinidad efectiva del trabajo primario. Si la afinidad especificada es un superconjunto de la afinidad del trabajo primario, se omite y se usa la afinidad del trabajo primario. |
|
Si algún proceso asociado al trabajo crea un proceso secundario con la marca CREATE_BREAKAWAY_FROM_JOB mientras este límite está en vigor, el proceso secundario no está asociado al trabajo.
Este límite requiere el uso de una estructura de JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Su miembro BasicLimitInformation es una estructura de JOBOBJECT_BASIC_LIMIT_INFORMATION . |
|
Fuerza una llamada a la función SetErrorMode con la marca SEM_NOGPFAULTERRORBOX para cada proceso asociado al trabajo.
Si se produce una excepción y el sistema llama a la función UnhandledExceptionFilter , el depurador tendrá la oportunidad de actuar. Si no hay ningún depurador, las funciones devuelven EXCEPTION_EXECUTE_HANDLER. Normalmente, esto provocará la finalización del proceso con el código de excepción como estado de salida. Este límite requiere el uso de una estructura de JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Su miembro BasicLimitInformation es una estructura de JOBOBJECT_BASIC_LIMIT_INFORMATION . |
|
Hace que todos los procesos asociados al trabajo limiten la suma en todo el trabajo de su memoria confirmada. Cuando un proceso intenta confirmar la memoria que superaría el límite de todo el trabajo, se produce un error. Si el objeto de trabajo está asociado a un puerto de finalización, se envía un mensaje de JOB_OBJECT_MSG_JOB_MEMORY_LIMIT al puerto de finalización.
Este límite requiere el uso de una estructura de JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Su miembro BasicLimitInformation es una estructura de JOBOBJECT_BASIC_LIMIT_INFORMATION . Para registrarse para recibir notificaciones cuando se supera este límite mientras se permite que los procesos sigan confirmando memoria, use la función SetInformationJobObject con la clase de información JobObjectNotificationLimitInformation . |
|
Establece un límite de tiempo de ejecución en modo de usuario para el trabajo. El miembro PerJobUserTimeLimit contiene información adicional. Esta marca no se puede usar con JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME. |
|
Hace que todos los procesos asociados al trabajo finalicen cuando se cierre el último identificador del trabajo.
Este límite requiere el uso de una estructura de JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Su miembro BasicLimitInformation es una estructura de JOBOBJECT_BASIC_LIMIT_INFORMATION . |
|
Conserva los límites de tiempo de trabajo establecidos anteriormente. Siempre que se establezca esta marca, puede establecer un límite de tiempo por trabajo una vez y, a continuación, modificar otros límites en las llamadas posteriores. Esta marca no se puede usar con JOB_OBJECT_LIMIT_JOB_TIME. |
|
Hace que todos los procesos asociados al trabajo usen la misma clase de prioridad. Para obtener más información, consulte Programación de prioridades. El miembro PriorityClass contiene información adicional.
Si el trabajo está anidado, la clase de prioridad efectiva es la clase de prioridad más baja de la cadena de trabajos. |
|
Hace que todos los procesos asociados al trabajo limiten su memoria confirmada. Cuando un proceso intenta confirmar la memoria que superaría el límite por proceso, se produce un error. Si el objeto de trabajo está asociado a un puerto de finalización, se envía un mensaje de JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT al puerto de finalización.
Si el trabajo está anidado, el límite de memoria efectivo es el límite de memoria más restrictivo de la cadena de trabajos. Este límite requiere el uso de una estructura de JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Su miembro BasicLimitInformation es una estructura de JOBOBJECT_BASIC_LIMIT_INFORMATION . |
|
Establece un límite de tiempo de ejecución en modo de usuario para cada proceso activo actualmente y para todos los procesos futuros asociados al trabajo. El miembro PerProcessUserTimeLimit contiene información adicional. |
|
Hace que todos los procesos del trabajo usen la misma clase de programación. El miembro SchedulingClass contiene información adicional.
Si el trabajo está anidado, la clase de programación eficaz es la clase de programación más baja de la cadena de trabajos. |
|
Permite que cualquier proceso asociado al trabajo cree procesos secundarios que no estén asociados al trabajo.
Si el trabajo está anidado y su objeto de trabajo inmediato permite la separación, el proceso secundario se separa del objeto de trabajo inmediato y de cada trabajo de la cadena de trabajos primarios, moviendo la jerarquía hasta que llegue a un trabajo que no permita la separación. Si el objeto de trabajo inmediato no permite la separación, el proceso secundario no se rompe aunque los trabajos de su cadena de trabajos primarios lo permitan. Este límite requiere el uso de una estructura de JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Su miembro BasicLimitInformation es una estructura de JOBOBJECT_BASIC_LIMIT_INFORMATION . |
|
Permite a los procesos usar un subconjunto de la afinidad de procesador para todos los procesos asociados al trabajo. Este valor debe combinarse con JOB_OBJECT_LIMIT_AFFINITY.
Windows Server 2008, Windows Vista, Windows Server 2003 y Windows XP: Esta marca se admite a partir de Windows 7 y Windows Server 2008 R2. |
|
Hace que todos los procesos asociados al trabajo usen los mismos tamaños mínimos y máximos del conjunto de trabajo. Los miembros MinimumWorkingSetSize y MaximumWorkingSetSize contienen información adicional.
Si el trabajo está anidado, el tamaño del conjunto de trabajo efectivo es el tamaño del conjunto de trabajo más pequeño de la cadena de trabajos. |
MinimumWorkingSetSize
Si LimitFlags especifica JOB_OBJECT_LIMIT_WORKINGSET, este miembro es el tamaño mínimo del conjunto de trabajo en bytes para cada proceso asociado al trabajo. De lo contrario, se omite este miembro.
Si MaximumWorkingSetSize no es cero, MinimumWorkingSetSize no puede ser cero.
MaximumWorkingSetSize
Si LimitFlags especifica JOB_OBJECT_LIMIT_WORKINGSET, este miembro es el tamaño máximo del conjunto de trabajo en bytes para cada proceso asociado al trabajo. De lo contrario, se omite este miembro.
Si MinimumWorkingSetSize no es cero, MaximumWorkingSetSize no puede ser cero.
ActiveProcessLimit
Si LimitFlags especifica JOB_OBJECT_LIMIT_ACTIVE_PROCESS, este miembro es el límite de proceso activo para el trabajo. De lo contrario, se omite este miembro.
Si intenta asociar un proceso a un trabajo y esto hace que el recuento de procesos activos supere este límite, el proceso se finaliza y se produce un error en la asociación.
Affinity
Si LimitFlags especifica JOB_OBJECT_LIMIT_AFFINITY, este miembro es la afinidad del procesador para todos los procesos asociados al trabajo. De lo contrario, se omite este miembro.
La afinidad debe ser un subconjunto de la máscara de afinidad del sistema obtenida llamando a la función GetProcessAffinityMask . La afinidad de cada subproceso se establece en este valor, pero los subprocesos pueden establecer posteriormente su afinidad, siempre que sea un subconjunto de la máscara de afinidad especificada. Los procesos no pueden establecer su propia máscara de afinidad.
PriorityClass
Si LimitFlags especifica JOB_OBJECT_LIMIT_PRIORITY_CLASS, este miembro es la clase de prioridad para todos los procesos asociados al trabajo. De lo contrario, se omite este miembro.
Los procesos y subprocesos no pueden modificar su clase de prioridad. El proceso de llamada debe habilitar el privilegio SE_INC_BASE_PRIORITY_NAME .
SchedulingClass
Si LimitFlags especifica JOB_OBJECT_LIMIT_SCHEDULING_CLASS, este miembro es la clase de programación de todos los procesos asociados al trabajo. De lo contrario, se omite este miembro.
Los valores válidos son de 0 a 9. Use 0 para la clase de programación menos favorable en relación con otros subprocesos y 9 para la clase de programación más favorable en relación con otros subprocesos. De forma predeterminada, este valor es 5. Para usar una clase de programación superior a 5, el proceso de llamada debe habilitar el privilegio SE_INC_BASE_PRIORITY_NAME .
Comentarios
Los procesos todavía pueden vaciar sus conjuntos de trabajo mediante la función SetProcessWorkingSetSize con (SIZE_T)-1, incluso cuando se usa JOB_OBJECT_LIMIT_WORKINGSET . Sin embargo, no puede usar SetProcessWorkingSetSize cambiar el tamaño mínimo o máximo del conjunto de trabajo de un proceso en un objeto de trabajo.
El sistema incrementa el recuento de procesos activos al intentar asociar un proceso a un trabajo. Si se supera el límite, el sistema disminuye el recuento de procesos activos solo cuando finaliza el proceso y se cierran todos los identificadores del proceso. Por lo tanto, si tiene un identificador abierto para un proceso que se ha terminado de tal manera, no puede asociar ningún proceso nuevo hasta que se cierre el identificador y el recuento de procesos activos esté por debajo del límite.
Requisitos
Cliente mínimo compatible | Windows XP [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2003 [solo aplicaciones de escritorio] |
Encabezado | winnt.h (incluya Windows.h) |
Consulte también
JOBOBJECT_END_OF_JOB_TIME_INFORMATION
JOBOBJECT_EXTENDED_LIMIT_INFORMATION