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 |
---|---|
|
Legt eine maximale Anzahl gleichzeitig aktiver Prozesse fest, die dem Auftrag zugeordnet sind. Das ActiveProcessLimit-Element enthält zusätzliche Informationen. |
|
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. |
|
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 . |
|
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 . |
|
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. |
|
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. |
|
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 . |
|
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. |
|
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. |
|
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 . |
|
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. |
|
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. |
|
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 . |
|
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. |
|
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
JOBOBJECT_END_OF_JOB_TIME_INFORMATION
JOBOBJECT_EXTENDED_LIMIT_INFORMATION