Condividi tramite


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
JOB_OBJECT_LIMIT_ACTIVE_PROCESS
0x00000008
Stabilisce un numero massimo di processi attivi contemporaneamente associati al processo. Il membro ActiveProcessLimit contiene informazioni aggiuntive.
JOB_OBJECT_LIMIT_AFFINITY
0x00000010
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.

JOB_OBJECT_LIMIT_BREAKAWAY_OK
0x00000800
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 .

JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION
0x00000400
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 .

JOB_OBJECT_LIMIT_JOB_MEMORY
0x00000200
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 .

JOB_OBJECT_LIMIT_JOB_TIME
0x00000004
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.
JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
0x00002000
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 .

JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME
0x00000040
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.
JOB_OBJECT_LIMIT_PRIORITY_CLASS
0x00000020
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.

JOB_OBJECT_LIMIT_PROCESS_MEMORY
0x00000100
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 .

JOB_OBJECT_LIMIT_PROCESS_TIME
0x00000002
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.
JOB_OBJECT_LIMIT_SCHEDULING_CLASS
0x00000080
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.

JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK
0x00001000
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 .

JOB_OBJECT_LIMIT_SUBSET_AFFINITY
0x00004000
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.

JOB_OBJECT_LIMIT_WORKINGSET
0x00000001
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

GetProcessAffinityMask

JOBOBJECT_END_OF_JOB_TIME_INFORMATION

JOBOBJECT_EXTENDED_LIMIT_INFORMATION

JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION

QueryInformationJobObject

SetInformationJobObject

SetProcessWorkingSetSize