Partager via


structure JOBOBJECT_BASIC_LIMIT_INFORMATION (winnt.h)

Contient des informations de limite de base pour un objet de travail.

Syntaxe

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;

Membres

PerProcessUserTimeLimit

Si LimitFlags spécifie JOB_OBJECT_LIMIT_PROCESS_TIME, ce membre est la limite de temps d’exécution en mode utilisateur par processus, en 100 nanosecondes. Sinon, ce membre est ignoré.

Le système vérifie régulièrement si chaque processus associé au travail a accumulé plus de temps en mode utilisateur que la limite définie. Si c’est le cas, le processus est terminé.

Si le travail est imbriqué, la limite effective est la limite la plus restrictive de la chaîne de travaux.

PerJobUserTimeLimit

Si LimitFlags spécifie JOB_OBJECT_LIMIT_JOB_TIME, ce membre est la limite de temps d’exécution en mode utilisateur par travail, en 100 nanosecondes. Sinon, ce membre est ignoré.

Le système ajoute l’heure actuelle des processus associés au travail à cette limite. Par exemple, si vous définissez cette limite sur 1 minute et que le travail a un processus qui a cumulé 5 minutes de temps en mode utilisateur, la limite effectivement appliquée est de 6 minutes.

Le système vérifie régulièrement si la somme du temps d’exécution en mode utilisateur pour tous les processus est supérieure à cette limite de fin de travail. Si c’est le cas, l’action spécifiée dans le membre EndOfJobTimeAction de la structure JOBOBJECT_END_OF_JOB_TIME_INFORMATION est effectuée. Par défaut, tous les processus sont arrêtés et le code status est défini sur ERROR_NOT_ENOUGH_QUOTA.

Pour vous inscrire à la notification lorsque cette limite est dépassée sans mettre fin aux processus, utilisez la fonction SetInformationJobObject avec la classe d’informations JobObjectNotificationLimitInformation .

LimitFlags

Indicateurs de limite qui sont en vigueur. Ce membre est un champ de bits qui détermine si d’autres membres de la structure sont utilisés. Vous pouvez spécifier n’importe quelle combinaison des valeurs suivantes.

Valeur Signification
JOB_OBJECT_LIMIT_ACTIVE_PROCESS
0x00000008
Établit un nombre maximal de processus actifs simultanément associés au travail. Le membre ActiveProcessLimit contient des informations supplémentaires.
JOB_OBJECT_LIMIT_AFFINITY
0x00000010
Fait que tous les processus associés au travail utilisent la même affinité processeur. Le membre Affinity contient des informations supplémentaires.

Si le travail est imbriqué, l’affinité processeur spécifiée doit être un sous-ensemble de l’affinité effective du travail parent. Si l’affinité spécifiée est un sur-ensemble de l’affinité du travail parent, elle est ignorée et l’affinité du travail parent est utilisée.

JOB_OBJECT_LIMIT_BREAKAWAY_OK
0x00000800
Si un processus associé au travail crée un processus enfant à l’aide de l’indicateur CREATE_BREAKAWAY_FROM_JOB tant que cette limite est en vigueur, le processus enfant n’est pas associé au travail.

Cette limite nécessite l’utilisation d’une structure JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Son membre BasicLimitInformation est une structure JOBOBJECT_BASIC_LIMIT_INFORMATION .

JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION
0x00000400
Force un appel à la fonction SetErrorMode avec l’indicateur SEM_NOGPFAULTERRORBOX pour chaque processus associé au travail.

Si une exception se produit et que le système appelle la fonction UnhandledExceptionFilter , le débogueur a la possibilité d’agir. S’il n’y a pas de débogueur, les fonctions retournent EXCEPTION_EXECUTE_HANDLER. Normalement, cela entraîne l’arrêt du processus avec le code d’exception comme status de sortie.

Cette limite nécessite l’utilisation d’une structure JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Son membre BasicLimitInformation est une structure JOBOBJECT_BASIC_LIMIT_INFORMATION .

JOB_OBJECT_LIMIT_JOB_MEMORY
0x00000200
Fait en sorte que tous les processus associés au travail limitent la somme de leur mémoire validée à l’échelle du travail. Lorsqu’un processus tente de valider la mémoire qui dépasse la limite à l’échelle du travail, il échoue. Si l’objet de travail est associé à un port d’achèvement, un message JOB_OBJECT_MSG_JOB_MEMORY_LIMIT est envoyé au port d’achèvement.

Cette limite nécessite l’utilisation d’une structure JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Son membre BasicLimitInformation est une structure JOBOBJECT_BASIC_LIMIT_INFORMATION .

Pour vous inscrire à la notification lorsque cette limite est dépassée tout en permettant aux processus de continuer à valider la mémoire, utilisez la fonction SetInformationJobObject avec la classe d’informations JobObjectNotificationLimitInformation .

JOB_OBJECT_LIMIT_JOB_TIME
0x00000004
Établit une limite de temps d’exécution en mode utilisateur pour le travail. Le membre PerJobUserTimeLimit contient des informations supplémentaires. Cet indicateur ne peut pas être utilisé avec JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME.
JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
0x00002000
Entraîne l’arrêt de tous les processus associés au travail lorsque le dernier handle du travail est fermé.

Cette limite nécessite l’utilisation d’une structure JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Son membre BasicLimitInformation est une structure JOBOBJECT_BASIC_LIMIT_INFORMATION .

JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME
0x00000040
Conserve les limites de temps de travail que vous avez définies précédemment. Tant que cet indicateur est défini, vous pouvez établir une limite de temps par tâche une fois, puis modifier d’autres limites dans les appels suivants. Cet indicateur ne peut pas être utilisé avec JOB_OBJECT_LIMIT_JOB_TIME.
JOB_OBJECT_LIMIT_PRIORITY_CLASS
0x00000020
Fait que tous les processus associés au travail utilisent la même classe de priorité. Pour plus d’informations, consultez Planification des priorités. Le membre PriorityClass contient des informations supplémentaires.

Si le travail est imbriqué, la classe de priorité effective est la classe de priorité la plus basse de la chaîne de travaux.

JOB_OBJECT_LIMIT_PROCESS_MEMORY
0x00000100
Oblige tous les processus associés au travail à limiter leur mémoire validée. Lorsqu’un processus tente de valider la mémoire qui dépasse la limite par processus, il échoue. Si l’objet de travail est associé à un port d’achèvement, un message JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT est envoyé au port d’achèvement.

Si le travail est imbriqué, la limite de mémoire effective est la limite de mémoire la plus restrictive de la chaîne de travaux.

Cette limite nécessite l’utilisation d’une structure JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Son membre BasicLimitInformation est une structure JOBOBJECT_BASIC_LIMIT_INFORMATION .

JOB_OBJECT_LIMIT_PROCESS_TIME
0x00000002
Établit une limite de temps d’exécution en mode utilisateur pour chaque processus actuellement actif et pour tous les processus futurs associés au travail. Le membre PerProcessUserTimeLimit contient des informations supplémentaires.
JOB_OBJECT_LIMIT_SCHEDULING_CLASS
0x00000080
Fait que tous les processus du travail utilisent la même classe de planification. Le membre SchedulingClass contient des informations supplémentaires.

Si le travail est imbriqué, la classe de planification effective est la classe de planification la plus basse de la chaîne de travaux.

JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK
0x00001000
Permet à n’importe quel processus associé au travail de créer des processus enfants qui ne le sont pas.

Si le travail est imbriqué et que son objet de travail immédiat autorise l’interruption, le processus enfant s’écarte de l’objet de travail immédiat et de chaque travail de la chaîne de travaux parente, en se déplaçant vers le haut de la hiérarchie jusqu’à atteindre un travail qui n’autorise pas l’interruption. Si l’objet de travail immédiat n’autorise pas l’interruption, le processus enfant ne s’interrompt pas même si les travaux de sa chaîne de travaux parente le permettent.

Cette limite nécessite l’utilisation d’une structure JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Son membre BasicLimitInformation est une structure JOBOBJECT_BASIC_LIMIT_INFORMATION .

JOB_OBJECT_LIMIT_SUBSET_AFFINITY
0x00004000
Permet aux processus d’utiliser un sous-ensemble de l’affinité processeur pour tous les processus associés au travail. Cette valeur doit être combinée avec JOB_OBJECT_LIMIT_AFFINITY.

Windows Server 2008, Windows Vista, Windows Server 2003 et Windows XP : Cet indicateur est pris en charge à partir de Windows 7 et Windows Server 2008 R2.

JOB_OBJECT_LIMIT_WORKINGSET
0x00000001
Fait que tous les processus associés au travail utilisent les mêmes tailles minimales et maximales de jeu de travail. Les membres MinimumWorkingSetSize et MaximumWorkingSetSize contiennent des informations supplémentaires.

Si le travail est imbriqué, la taille effective du jeu de travail est la plus petite taille de jeu de travail dans la chaîne de travaux.

MinimumWorkingSetSize

Si LimitFlags spécifie JOB_OBJECT_LIMIT_WORKINGSET, ce membre est la taille minimale du jeu de travail en octets pour chaque processus associé au travail. Sinon, ce membre est ignoré.

Si MaximumWorkingSetSize est différent de zéro, MinimumWorkingSetSize ne peut pas être égal à zéro.

MaximumWorkingSetSize

Si LimitFlags spécifie JOB_OBJECT_LIMIT_WORKINGSET, ce membre est la taille maximale du jeu de travail en octets pour chaque processus associé au travail. Sinon, ce membre est ignoré.

Si MinimumWorkingSetSize est différent de zéro, MaximumWorkingSetSize ne peut pas être égal à zéro.

ActiveProcessLimit

Si LimitFlags spécifie JOB_OBJECT_LIMIT_ACTIVE_PROCESS, ce membre est la limite de processus active pour le travail. Sinon, ce membre est ignoré.

Si vous essayez d’associer un processus à un travail et que le nombre de processus actifs dépasse cette limite, le processus est arrêté et l’association échoue.

Affinity

Si LimitFlags spécifie JOB_OBJECT_LIMIT_AFFINITY, ce membre est l’affinité processeur pour tous les processus associés au travail. Sinon, ce membre est ignoré.

L’affinité doit être un sous-ensemble du masque d’affinité système obtenu en appelant la fonction GetProcessAffinityMask . L’affinité de chaque thread est définie sur cette valeur, mais les threads sont libres de définir leur affinité par la suite, tant qu’il s’agit d’un sous-ensemble du masque d’affinité spécifié. Les processus ne peuvent pas définir leur propre masque d’affinité.

PriorityClass

Si LimitFlags spécifie JOB_OBJECT_LIMIT_PRIORITY_CLASS, ce membre est la classe de priorité pour tous les processus associés au travail. Sinon, ce membre est ignoré.

Les processus et les threads ne peuvent pas modifier leur classe de priorité. Le processus appelant doit activer le privilège SE_INC_BASE_PRIORITY_NAME .

SchedulingClass

Si LimitFlags spécifie JOB_OBJECT_LIMIT_SCHEDULING_CLASS, ce membre est la classe de planification pour tous les processus associés au travail. Sinon, ce membre est ignoré.

Les valeurs valides sont comprises entre 0 et 9. Utilisez 0 pour la classe de planification la moins favorable par rapport aux autres threads, et 9 pour la classe de planification la plus favorable par rapport aux autres threads. Par défaut, cette valeur est 5. Pour utiliser une classe de planification supérieure à 5, le processus appelant doit activer le privilège SE_INC_BASE_PRIORITY_NAME .

Remarques

Les processus peuvent toujours vider leurs jeux de travail à l’aide de la fonction SetProcessWorkingSetSize avec (SIZE_T)-1, même lorsque JOB_OBJECT_LIMIT_WORKINGSET est utilisé. Toutefois, vous ne pouvez pas utiliser SetProcessWorkingSetSize modifier la taille minimale ou maximale du jeu de travail d’un processus dans un objet de travail.

Le système incrémente le nombre de processus actifs lorsque vous tentez d’associer un processus à un travail. Si la limite est dépassée, le système décrémente le nombre de processus actifs uniquement lorsque le processus s’arrête et que tous les handles du processus sont fermés. Par conséquent, si vous avez un handle ouvert pour un processus qui a été arrêté de cette manière, vous ne pouvez associer aucun nouveau processus tant que le handle n’est pas fermé et que le nombre de processus actifs est inférieur à la limite.

Configuration requise

   
Client minimal pris en charge Windows XP [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
En-tête winnt.h (inclure Windows.h)

Voir aussi

GetProcessAffinityMask

JOBOBJECT_END_OF_JOB_TIME_INFORMATION

JOBOBJECT_EXTENDED_LIMIT_INFORMATION

JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION

QueryInformationJobObject

SetInformationJobObject

SetProcessWorkingSetSize