Freigeben über


JOBOBJECT_BASIC_LIMIT_INFORMATION-Struktur (winnt.h)

Enthält grundlegende Grenzwertinformationen für ein Auftragsobjekt.

Syntax

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;

Member

PerProcessUserTimeLimit

Wenn LimitFlagsJOB_OBJECT_LIMIT_PROCESS_TIME angibt, ist dieses Element das Pro-Prozess-Ausführungszeitlimit für den Benutzermodus in 100 Nanosekunden-Ticks. Andernfalls wird dieser Member ignoriert.

Das System überprüft in regelmäßigen Abständen, um zu ermitteln, ob jeder dem Auftrag zugeordnete Prozess mehr Benutzermoduszeit als das festgelegte Limit angesammelt hat. Falls ja, wird der Prozess beendet.

Wenn der Auftrag geschachtelt ist, ist der effektive Grenzwert das einschränkendste Limit in der Auftragskette.

PerJobUserTimeLimit

Wenn LimitFlagsJOB_OBJECT_LIMIT_JOB_TIME angibt, ist dieser Member das Ausführungszeitlimit pro Auftrag für den Benutzermodus in 100 Nanosekunden-Ticks. Andernfalls wird dieser Member ignoriert.

Das System fügt diesem Grenzwert die aktuelle Zeit der dem Auftrag zugeordneten Prozesse hinzu. Wenn Sie beispielsweise dieses Limit auf 1 Minute festlegen und der Auftrag über einen Prozess verfügt, der 5 Minuten Benutzermoduszeit angesammelt hat, beträgt das tatsächlich erzwungene Limit 6 Minuten.

Das System überprüft in regelmäßigen Abständen, um zu ermitteln, ob die Summe der Ausführungszeit im Benutzermodus für alle Prozesse größer ist als dieses Grenzwert für das Auftragsende. Wenn dies der Grund ist, wird die aktion ausgeführt, die im EndOfJobTimeAction-Member der JOBOBJECT_END_OF_JOB_TIME_INFORMATION Struktur angegeben ist. Standardmäßig werden alle Prozesse beendet, und der status Code ist auf ERROR_NOT_ENOUGH_QUOTA festgelegt.

Um sich für Benachrichtigungen zu registrieren, wenn dieser Grenzwert überschritten wird, ohne Prozesse zu beenden, verwenden Sie die SetInformationJobObject-Funktion mit der JobObjectNotificationLimitInformation-Informationsklasse .

LimitFlags

Die geltenden Grenzwertflags. Dieses Element ist ein Bitfeld, das bestimmt, ob andere Strukturmember verwendet werden. Es kann eine beliebige Kombination der folgenden Werte angegeben werden.

Wert Bedeutung
JOB_OBJECT_LIMIT_ACTIVE_PROCESS
0x00000008
Legt eine maximale Anzahl gleichzeitig aktiver Prozesse fest, die dem Auftrag zugeordnet sind. Das ActiveProcessLimit-Element enthält zusätzliche Informationen.
JOB_OBJECT_LIMIT_AFFINITY
0x00000010
Bewirkt, dass alle dem Auftrag zugeordneten Prozesse die gleiche Prozessoraffinität verwenden. Das Affinitätselement enthält zusätzliche Informationen.

Wenn der Auftrag geschachtelt ist, muss die angegebene Prozessoraffinität eine Teilmenge der effektiven Affinität des übergeordneten Auftrags sein. Wenn die angegebene Affinität eine Übermenge der Affinität des übergeordneten Auftrags ist, wird sie ignoriert und die Affinität des übergeordneten Auftrags verwendet.

JOB_OBJECT_LIMIT_BREAKAWAY_OK
0x00000800
Wenn ein dem Auftrag zugeordneter Prozess einen untergeordneten Prozess unter Verwendung des CREATE_BREAKAWAY_FROM_JOB-Flags erstellt, während dieser Grenzwert gilt, wird der untergeordnete Prozess nicht dem Auftrag zugeordnet.

Dieses Limit erfordert die Verwendung einer JOBOBJECT_EXTENDED_LIMIT_INFORMATION-Struktur . Das Element BasicLimitInformation ist eine JOBOBJECT_BASIC_LIMIT_INFORMATION-Struktur .

JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION
0x00000400
Erzwingt einen Aufruf der SetErrorMode-Funktion mit dem SEM_NOGPFAULTERRORBOX-Flag für jeden dem Auftrag zugeordneten Prozess.

Wenn eine Ausnahme auftritt und das System die Funktion UnhandledExceptionFilter aufruft, erhält der Debugger die Möglichkeit, zu handeln. Wenn kein Debugger vorhanden ist, geben die Funktionen EXCEPTION_EXECUTE_HANDLER zurück. Normalerweise führt dies dazu, dass der Prozess mit dem Ausnahmecode beendet wird, als das Beenden status.

Dieses Limit erfordert die Verwendung einer JOBOBJECT_EXTENDED_LIMIT_INFORMATION-Struktur . Das Element BasicLimitInformation ist eine JOBOBJECT_BASIC_LIMIT_INFORMATION-Struktur .

JOB_OBJECT_LIMIT_JOB_MEMORY
0x00000200
Bewirkt, dass alle dem Auftrag zugeordneten Prozesse die auftragsweite Summe ihres gebundenen Arbeitsspeichers einschränken. Wenn ein Prozess versucht, Arbeitsspeicher zu commiten, der den auftragsweiten Grenzwert überschreitet, schlägt er fehl. Wenn das Auftragsobjekt einem Vervollständigungsport zugeordnet ist, wird eine JOB_OBJECT_MSG_JOB_MEMORY_LIMIT Nachricht an den Vervollständigungsport gesendet.

Dieses Limit erfordert die Verwendung einer JOBOBJECT_EXTENDED_LIMIT_INFORMATION-Struktur . Das Element BasicLimitInformation ist eine JOBOBJECT_BASIC_LIMIT_INFORMATION-Struktur .

Verwenden Sie die SetInformationJobObject-Funktion mit der JobObjectNotificationLimitInformation-Informationsklasse , um sich für Benachrichtigungen zu registrieren, wenn dieser Grenzwert überschritten wird, während Prozesse weiterhin Arbeitsspeicher committen können.

JOB_OBJECT_LIMIT_JOB_TIME
0x00000004
Legt ein Ausführungszeitlimit für den Benutzermodus für den Auftrag fest. Das PerJobUserTimeLimit-Element enthält zusätzliche Informationen. Dieses Flag kann nicht mit JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME verwendet werden.
JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
0x00002000
Bewirkt, dass alle dem Auftrag zugeordneten Prozesse beendet werden, wenn das letzte Handle für den Auftrag geschlossen wird.

Dieses Limit erfordert die Verwendung einer JOBOBJECT_EXTENDED_LIMIT_INFORMATION-Struktur . Das Element BasicLimitInformation ist eine JOBOBJECT_BASIC_LIMIT_INFORMATION-Struktur .

JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME
0x00000040
Behält alle zuvor festgelegten Auftragszeitlimits bei. Solange dieses Flag festgelegt ist, können Sie einmal ein Zeitlimit pro Auftrag festlegen und dann andere Grenzwerte in nachfolgenden Aufrufen ändern. Dieses Flag kann nicht mit JOB_OBJECT_LIMIT_JOB_TIME verwendet werden.
JOB_OBJECT_LIMIT_PRIORITY_CLASS
0x00000020
Bewirkt, dass alle dem Auftrag zugeordneten Prozesse dieselbe Prioritätsklasse verwenden. Weitere Informationen finden Sie unter Planungsprioritäten. Das PriorityClass-Element enthält zusätzliche Informationen.

Wenn der Auftrag geschachtelt ist, ist die effektive Prioritätsklasse die niedrigste Prioritätsklasse in der Auftragskette.

JOB_OBJECT_LIMIT_PROCESS_MEMORY
0x00000100
Bewirkt, dass alle dem Auftrag zugeordneten Prozesse ihren zugesicherten Arbeitsspeicher einschränken. Wenn ein Prozess versucht, Arbeitsspeicher zu commiten, der den Grenzwert pro Prozess überschreiten würde, schlägt er fehl. Wenn das Auftragsobjekt einem Vervollständigungsport zugeordnet ist, wird eine JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT Nachricht an den Vervollständigungsport gesendet.

Wenn der Auftrag geschachtelt ist, ist das effektive Arbeitsspeicherlimit das restriktivste Speicherlimit in der Auftragskette.

Dieses Limit erfordert die Verwendung einer JOBOBJECT_EXTENDED_LIMIT_INFORMATION-Struktur . Das Element BasicLimitInformation ist eine JOBOBJECT_BASIC_LIMIT_INFORMATION-Struktur .

JOB_OBJECT_LIMIT_PROCESS_TIME
0x00000002
Legt ein Zeitlimit für die Ausführung im Benutzermodus für jeden aktuell aktiven Prozess und für alle zukünftigen Prozesse fest, die dem Auftrag zugeordnet sind. Das PerProcessUserTimeLimit-Element enthält zusätzliche Informationen.
JOB_OBJECT_LIMIT_SCHEDULING_CLASS
0x00000080
Bewirkt, dass alle Prozesse im Auftrag dieselbe Planungsklasse verwenden. Das SchedulingClass-Element enthält zusätzliche Informationen.

Wenn der Auftrag geschachtelt ist, ist die effektive Planungsklasse die niedrigste Planungsklasse in der Auftragskette.

JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK
0x00001000
Ermöglicht jedem dem Auftrag zugeordneten Prozess das Erstellen untergeordneter Prozesse, die nicht dem Auftrag zugeordnet sind.

Wenn der Auftrag geschachtelt ist und sein unmittelbares Auftragsobjekt eine Unterbrechung zulässt, löst sich der untergeordnete Prozess vom unmittelbaren Auftragsobjekt und von jedem Auftrag in der übergeordneten Auftragskette ab und bewegt sich in der Hierarchie nach oben, bis er einen Auftrag erreicht, der keine Unterbrechung zulässt. Wenn das unmittelbare Auftragsobjekt keine Unterbrechung zulässt, bricht der untergeordnete Prozess nicht ab, auch wenn Aufträge in seiner übergeordneten Auftragskette dies zulassen.

Dieses Limit erfordert die Verwendung einer JOBOBJECT_EXTENDED_LIMIT_INFORMATION-Struktur . Das Element BasicLimitInformation ist eine JOBOBJECT_BASIC_LIMIT_INFORMATION-Struktur .

JOB_OBJECT_LIMIT_SUBSET_AFFINITY
0x00004000
Ermöglicht Es Prozessen, eine Teilmenge der Prozessoraffinität für alle Dem Auftrag zugeordneten Prozesse zu verwenden. Dieser Wert muss mit JOB_OBJECT_LIMIT_AFFINITY kombiniert werden.

Windows Server 2008, Windows Vista, Windows Server 2003 und Windows XP: Dieses Flag wird ab Windows 7 und Windows Server 2008 R2 unterstützt.

JOB_OBJECT_LIMIT_WORKINGSET
0x00000001
Bewirkt, dass alle dem Auftrag zugeordneten Prozesse die gleichen mindesten und maximalen Arbeitssatzgrößen verwenden. Die Member MinimumWorkingSetSize und MaximumWorkingSetSize enthalten zusätzliche Informationen.

Wenn der Auftrag geschachtelt ist, ist die effektive Arbeitssatzgröße die kleinste Arbeitssatzgröße in der Auftragskette.

MinimumWorkingSetSize

Wenn LimitFlagsJOB_OBJECT_LIMIT_WORKINGSET angibt, ist dieser Member die minimale Arbeitssatzgröße in Byte für jeden dem Auftrag zugeordneten Prozess. Andernfalls wird dieser Member ignoriert.

Wenn MaximumWorkingSetSize ungleich null ist, darf MinimumWorkingSetSize nicht 0 sein.

MaximumWorkingSetSize

Wenn LimitFlagsJOB_OBJECT_LIMIT_WORKINGSET angibt, ist dieser Member die maximale Arbeitssatzgröße in Bytes für jeden dem Auftrag zugeordneten Prozess. Andernfalls wird dieser Member ignoriert.

Wenn MinimumWorkingSetSize ungleich null ist, darf MaximumWorkingSetSize nicht 0 sein.

ActiveProcessLimit

Wenn LimitFlagsJOB_OBJECT_LIMIT_ACTIVE_PROCESS angibt, ist dieses Element der aktive Prozessgrenzwert für den Auftrag. Andernfalls wird dieser Member ignoriert.

Wenn Sie versuchen, einen Prozess einem Auftrag zuzuordnen, und dies bewirkt, dass die Anzahl der aktiven Prozesse diesen Grenzwert überschreitet, wird der Prozess beendet, und die Zuordnung schlägt fehl.

Affinity

Wenn LimitFlagsJOB_OBJECT_LIMIT_AFFINITY angibt, ist dieses Element die Prozessoraffinität für alle Dem Auftrag zugeordneten Prozesse. Andernfalls wird dieser Member ignoriert.

Die Affinität muss eine Teilmenge der Systemaffinitätsmaske sein, die durch Aufrufen der GetProcessAffinityMask-Funktion abgerufen wird. Die Affinität jedes Threads ist auf diesen Wert festgelegt, aber Threads können ihre Affinität anschließend festlegen, solange es sich um eine Teilmenge der angegebenen Affinitätsmaske handelt. Prozesse können keine eigene Affinitätsmaske festlegen.

PriorityClass

Wenn LimitFlagsJOB_OBJECT_LIMIT_PRIORITY_CLASS angibt, ist dieser Member die Prioritätsklasse für alle Prozesse, die dem Auftrag zugeordnet sind. Andernfalls wird dieser Member ignoriert.

Prozesse und Threads können ihre Prioritätsklasse nicht ändern. Der aufrufende Prozess muss die berechtigung SE_INC_BASE_PRIORITY_NAME aktivieren.

SchedulingClass

Wenn LimitFlagsJOB_OBJECT_LIMIT_SCHEDULING_CLASS angibt, ist dieser Member die Planungsklasse für alle Prozesse, die dem Auftrag zugeordnet sind. Andernfalls wird dieser Member ignoriert.

Die gültigen Werte sind 0 bis 9. Verwenden Sie 0 für die am wenigsten günstige Planungsklasse im Verhältnis zu anderen Threads und 9 für die günstigste Planungsklasse im Vergleich zu anderen Threads. Standardmäßig ist dieser Wert 5. Um eine Planungsklasse verwenden zu können, die größer als 5 ist, muss der aufrufende Prozess die berechtigung SE_INC_BASE_PRIORITY_NAME aktivieren.

Hinweise

Prozesse können weiterhin ihre Arbeitssätze mithilfe der SetProcessWorkingSetSize-Funktion mit (SIZE_T)-1 leeren, auch wenn JOB_OBJECT_LIMIT_WORKINGSET verwendet wird. Sie können jedoch mit SetProcessWorkingSetSize die minimale oder maximale Arbeitssatzgröße eines Prozesses in einem Auftragsobjekt nicht ändern.

Das System erhöht die Anzahl der aktiven Prozesse, wenn Sie versuchen, einen Prozess einem Auftrag zuzuordnen. Wenn der Grenzwert überschritten wird, verringert das System die Anzahl der aktiven Prozesse nur, wenn der Prozess beendet und alle Handles für den Prozess geschlossen werden. Wenn Sie also über ein offenes Handle für einen Prozess verfügen, der auf diese Weise beendet wurde, können Sie keine neuen Prozesse zuordnen, bis das Handle geschlossen ist und die Anzahl der aktiven Prozesse unter dem Grenzwert liegt.

Anforderungen

   
Unterstützte Mindestversion (Client) Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Kopfzeile winnt.h (windows.h einschließen)

Weitere Informationen

GetProcessAffinityMask

JOBOBJECT_END_OF_JOB_TIME_INFORMATION

JOBOBJECT_EXTENDED_LIMIT_INFORMATION

JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION

QueryInformationJobObject

SetInformationJobObject

SetProcessWorkingSetSize