JOBOBJECT_BASIC_LIMIT_INFORMATION struttura (winnt.h)
Contiene informazioni di base sul limite per un oggetto processo.
Sintassi
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;
Members
PerProcessUserTimeLimit
Se LimitFlags specifica JOB_OBJECT_LIMIT_PROCESS_TIME, questo membro è il limite di tempo di esecuzione in modalità utente per processo, in 100-nanosecondi tick. In caso contrario, questo membro viene ignorato.
Il sistema verifica periodicamente se ogni processo associato al processo ha accumulato più tempo in modalità utente rispetto al limite impostato. Se ha, il processo viene terminato.
Se il processo è annidato, il limite effettivo è il limite più restrittivo nella catena di processi.
PerJobUserTimeLimit
Se LimitFlags specifica JOB_OBJECT_LIMIT_JOB_TIME, questo membro è il limite di tempo di esecuzione in modalità utente per processo, in 100-nanosecondi tick. In caso contrario, questo membro viene ignorato.
Il sistema aggiunge l'ora corrente dei processi associati al processo a questo limite. Ad esempio, se si imposta questo limite su 1 minuto e il processo ha un processo che ha accumulato 5 minuti di tempo in modalità utente, il limite effettivamente applicato è di 6 minuti.
Il sistema controlla periodicamente se la somma del tempo di esecuzione in modalità utente per tutti i processi è maggiore di questo limite di fine processo. In caso affermativo, viene eseguita l'azione specificata nel membro EndOfJobTimeAction della struttura JOBOBJECT_END_OF_JOB_TIME_INFORMATION . Per impostazione predefinita, tutti i processi vengono terminati e il codice di stato è impostato su ERROR_NOT_ENOUGH_QUOTA.
Per registrare la notifica quando questo limite viene superato senza terminare i processi, usare la funzione SetInformationJobObject con la classe di informazioni JobObjectNotificationLimitInformation .
LimitFlags
Flag di limite effettivi. Questo membro è un campo bit che determina se vengono usati altri membri della struttura. È possibile specificare qualsiasi combinazione dei valori seguenti.
Valore | Significato |
---|---|
|
Stabilisce un numero massimo di processi attivi contemporaneamente associati al processo. Il membro ActiveProcessLimit contiene informazioni aggiuntive. |
|
Determina che tutti i processi associati al processo usino la stessa affinità di processore. Il membro Affinità contiene informazioni aggiuntive .
Se il processo è annidato, l'affinità del processore specificata deve essere un subset dell'affinità effettiva del processo padre. Se l'affinità specificata è un superset dell'affinità del processo padre, viene ignorata e viene usata l'affinità del processo padre. |
|
Se qualsiasi processo associato al processo crea un processo figlio usando il flag di CREATE_BREAKAWAY_FROM_JOB mentre questo limite è effettivo, il processo figlio non è associato al processo.
Questo limite richiede l'uso di una struttura JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Il membro BasicLimitInformation è una struttura JOBOBJECT_BASIC_LIMIT_INFORMATION . |
|
Forza una chiamata alla funzione SetErrorMode con il flag di SEM_NOGPFAULTERRORBOX per ogni processo associato al processo.
Se si verifica un'eccezione e il sistema chiama la funzione UnhandledExceptionFilter , il debugger avrà la possibilità di agire. Se non è presente alcun debugger, le funzioni restituisce EXCEPTION_EXECUTE_HANDLER. In genere, questo causerà la terminazione del processo con il codice di eccezione come stato di uscita. Questo limite richiede l'uso di una struttura JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Il membro BasicLimitInformation è una struttura JOBOBJECT_BASIC_LIMIT_INFORMATION . |
|
Determina che tutti i processi associati al processo limitano la somma a livello di processo della memoria con commit. Quando un processo tenta di eseguire il commit della memoria che supera il limite a livello di processo, ha esito negativo. Se l'oggetto processo è associato a una porta di completamento, viene inviato un messaggio di JOB_OBJECT_MSG_JOB_MEMORY_LIMIT alla porta di completamento.
Questo limite richiede l'uso di una struttura JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Il membro BasicLimitInformation è una struttura JOBOBJECT_BASIC_LIMIT_INFORMATION . Per registrare la notifica quando questo limite viene superato, consentendo ai processi di continuare a eseguire il commit della memoria, usare la funzione SetInformationJobObject con la classe di informazioni JobObjectNotificationLimitInformation . |
|
Stabilisce un limite di tempo di esecuzione in modalità utente per il processo. Il membro PerJobUserTimeLimit contiene informazioni aggiuntive. Questo flag non può essere usato con JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME. |
|
Causa la chiusura di tutti i processi associati al processo quando l'ultimo handle al processo viene chiuso.
Questo limite richiede l'uso di una struttura JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Il membro BasicLimitInformation è una struttura JOBOBJECT_BASIC_LIMIT_INFORMATION . |
|
Mantiene i limiti di tempo del processo impostati in precedenza. Purché questo flag sia impostato, è possibile stabilire un limite di tempo per processo una sola volta, quindi modificare altri limiti nelle chiamate successive. Questo flag non può essere usato con JOB_OBJECT_LIMIT_JOB_TIME. |
|
Determina che tutti i processi associati al processo usino la stessa classe di priorità. Per altre informazioni, vedere Pianificazione delle priorità. Il membro PriorityClass contiene informazioni aggiuntive.
Se il processo è annidato, la classe priorità effettiva è la classe di priorità più bassa nella catena di processi. |
|
Determina che tutti i processi associati al processo limitino la memoria di commit. Quando un processo tenta di eseguire il commit della memoria che supera il limite per processo, non riesce. Se l'oggetto processo è associato a una porta di completamento, viene inviato un messaggio JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT alla porta di completamento.
Se il processo è annidato, il limite di memoria effettivo è il limite di memoria più restrittivo nella catena di processi. Questo limite richiede l'uso di una struttura JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Il membro BasicLimitInformation è una struttura JOBOBJECT_BASIC_LIMIT_INFORMATION . |
|
Stabilisce un limite di tempo di esecuzione in modalità utente per ogni processo attualmente attivo e per tutti i processi futuri associati al processo. Il membro PerProcessUserTimeLimit contiene informazioni aggiuntive. |
|
Causa l'uso della stessa classe di pianificazione di tutti i processi nel processo. Il membro SchedulingClass contiene informazioni aggiuntive .
Se il processo è annidato, la classe di pianificazione effettiva è la classe di pianificazione più bassa nella catena di processi. |
|
Consente a qualsiasi processo associato al processo di creare processi figlio non associati al processo.
Se il processo viene annidato e il relativo oggetto processo immediato consente l'interruzione, il processo figlio si interrompe dall'oggetto processo immediato e da ogni processo nella catena di processi padre, spostandosi verso l'alto fino a quando non raggiunge un processo che non consente l'interruzione. Se l'oggetto processo immediato non consente l'interruzione, il processo figlio non si interrompe anche se i processi nella catena di processi padre lo consentono. Questo limite richiede l'uso di una struttura JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Il membro BasicLimitInformation è una struttura JOBOBJECT_BASIC_LIMIT_INFORMATION . |
|
Consente ai processi di usare un subset dell'affinità del processore per tutti i processi associati al processo. Questo valore deve essere combinato con JOB_OBJECT_LIMIT_AFFINITY.
Windows Server 2008, Windows Vista, Windows Server 2003 e Windows XP: Questo flag è supportato a partire da Windows 7 e Windows Server 2008 R2. |
|
Determina che tutti i processi associati al processo usino le stesse dimensioni minime e massime del set di lavoro. I membri MinimumWorkingSetSize e MaximumWorkingSetSize contengono informazioni aggiuntive .
Se il processo è annidato, le dimensioni effettive del set di lavoro sono le dimensioni più piccole del set di lavoro nella catena di processi. |
MinimumWorkingSetSize
Se LimitFlags specifica JOB_OBJECT_LIMIT_WORKINGSET, questo membro è la dimensione minima del set di lavoro in byte per ogni processo associato al processo. In caso contrario, questo membro viene ignorato.
Se MaximumWorkingSetSize è diverso da zero, MinimumWorkingSetSize non può essere zero.
MaximumWorkingSetSize
Se LimitFlags specifica JOB_OBJECT_LIMIT_WORKINGSET, questo membro è la dimensione massima del set di lavoro in byte per ogni processo associato al processo. In caso contrario, questo membro viene ignorato.
Se MinimumWorkingSetSize è diverso da zero, MaximumWorkingSetSize non può essere zero.
ActiveProcessLimit
Se LimitFlags specifica JOB_OBJECT_LIMIT_ACTIVE_PROCESS, questo membro è il limite di processo attivo per il processo. In caso contrario, questo membro viene ignorato.
Se si tenta di associare un processo a un processo e questo causa il superamento del numero di processi attivi, il processo viene terminato e l'associazione ha esito negativo.
Affinity
Se LimitFlags specifica JOB_OBJECT_LIMIT_AFFINITY, questo membro è l'affinità del processore per tutti i processi associati al processo. In caso contrario, questo membro viene ignorato.
L'affinità deve essere un subset della maschera di affinità di sistema ottenuta chiamando la funzione GetProcessAffinityMask . L'affinità di ogni thread è impostata su questo valore, ma i thread sono liberi di impostare successivamente la loro affinità, purché sia un subset della maschera di affinità specificata. I processi non possono impostare la propria maschera di affinità.
PriorityClass
Se LimitFlags specifica JOB_OBJECT_LIMIT_PRIORITY_CLASS, questo membro è la classe priorità per tutti i processi associati al processo. In caso contrario, questo membro viene ignorato.
I processi e i thread non possono modificare la classe di priorità. Il processo di chiamata deve abilitare il privilegio SE_INC_BASE_PRIORITY_NAME .
SchedulingClass
Se LimitFlags specifica JOB_OBJECT_LIMIT_SCHEDULING_CLASS, questo membro è la classe di pianificazione per tutti i processi associati al processo. In caso contrario, questo membro viene ignorato.
I valori validi sono da 0 a 9. Usare 0 per la classe di pianificazione meno favorevole rispetto ad altri thread e 9 per la classe di pianificazione più favorevole rispetto ad altri thread. Per impostazione predefinita, questo valore è 5. Per usare una classe di pianificazione maggiore di 5, il processo chiamante deve abilitare il privilegio SE_INC_BASE_PRIORITY_NAME .
Commenti
I processi possono comunque svuotare i set di lavoro usando la funzione SetProcessWorkingSetSize con (SIZE_T)-1, anche quando viene usata JOB_OBJECT_LIMIT_WORKINGSET . Tuttavia, non è possibile usare SetProcessWorkingSetSize modificare le dimensioni minime o massime del set di lavoro di un processo in un oggetto processo.
Il sistema incrementa il conteggio del processo attivo quando si tenta di associare un processo a un processo. Se il limite viene superato, il sistema decreta il conteggio del processo attivo solo quando il processo termina e tutti gli handle al processo vengono chiusi. Pertanto, se si dispone di un handle aperto a un processo che è stato terminato in questo modo, non è possibile associare nuovi processi fino a quando l'handle non viene chiuso e il numero di processi attivi è inferiore al limite.
Requisiti
Client minimo supportato | Windows XP [solo app desktop] |
Server minimo supportato | Windows Server 2003 [solo app desktop] |
Intestazione | winnt.h (includere Windows.h) |
Vedi anche
JOBOBJECT_END_OF_JOB_TIME_INFORMATION
JOBOBJECT_EXTENDED_LIMIT_INFORMATION