Compartilhar via


estrutura JOBOBJECT_BASIC_LIMIT_INFORMATION (winnt.h)

Contém informações básicas de limite para um objeto de trabalho.

Sintaxe

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;

Membros

PerProcessUserTimeLimit

Se LimitFlagsespecificar JOB_OBJECT_LIMIT_PROCESS_TIME, esse membro será o limite de tempo de execução por processo do modo de usuário, em tiques de 100 nanossegundos. Caso contrário, esse membro será ignorado.

O sistema verifica periodicamente para determinar se cada processo associado ao trabalho acumulou mais tempo de modo de usuário do que o limite definido. Se tiver, o processo será encerrado.

Se o trabalho estiver aninhado, o limite efetivo será o limite mais restritivo na cadeia de trabalhos.

PerJobUserTimeLimit

Se LimitFlagsespecificar JOB_OBJECT_LIMIT_JOB_TIME, esse membro será o limite de tempo de execução por modo de usuário por trabalho, em tiques de 100 nanossegundos. Caso contrário, esse membro será ignorado.

O sistema adiciona a hora atual dos processos associados ao trabalho a esse limite. Por exemplo, se você definir esse limite como 1 minuto e o trabalho tiver um processo que tenha acumulado 5 minutos de tempo no modo de usuário, o limite realmente imposto será de 6 minutos.

O sistema verifica periodicamente para determinar se a soma do tempo de execução do modo de usuário para todos os processos é maior que esse limite de fim de trabalho. Se for, a ação especificada no membro EndOfJobTimeAction da estrutura JOBOBJECT_END_OF_JOB_TIME_INFORMATION será executada. Por padrão, todos os processos são encerrados e o código de status é definido como ERROR_NOT_ENOUGH_QUOTA.

Para se registrar para notificação quando esse limite for excedido sem encerrar processos, use a função SetInformationJobObject com a classe de informações JobObjectNotificationLimitInformation .

LimitFlags

Os sinalizadores de limite que estão em vigor. Esse membro é um campo de bits que determina se outros membros da estrutura são usados. Qualquer combinação dos valores a seguir pode ser especificada.

Valor Significado
JOB_OBJECT_LIMIT_ACTIVE_PROCESS
0x00000008
Estabelece um número máximo de processos ativos simultaneamente associados ao trabalho. O membro ActiveProcessLimit contém informações adicionais.
JOB_OBJECT_LIMIT_AFFINITY
0x00000010
Faz com que todos os processos associados ao trabalho usem a mesma afinidade de processador. O membro Affinity contém informações adicionais.

Se o trabalho estiver aninhado, a afinidade de processador especificada deverá ser um subconjunto da afinidade efetiva do trabalho pai. Se a afinidade especificada for um superconjunto da afinidade do trabalho pai, ela será ignorada e a afinidade do trabalho pai será usada.

JOB_OBJECT_LIMIT_BREAKAWAY_OK
0x00000800
Se qualquer processo associado ao trabalho criar um processo filho usando o sinalizador CREATE_BREAKAWAY_FROM_JOB enquanto esse limite estiver em vigor, o processo filho não será associado ao trabalho.

Esse limite requer o uso de uma estrutura JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Seu membro BasicLimitInformation é uma estrutura JOBOBJECT_BASIC_LIMIT_INFORMATION .

JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION
0x00000400
Força uma chamada para a função SetErrorMode com o sinalizador SEM_NOGPFAULTERRORBOX para cada processo associado ao trabalho.

Se ocorrer uma exceção e o sistema chamar a função UnhandledExceptionFilter , o depurador terá a chance de agir. Se não houver depurador, as funções retornarão EXCEPTION_EXECUTE_HANDLER. Normalmente, isso causará o encerramento do processo com o código de exceção à medida que o status de saída.

Esse limite requer o uso de uma estrutura JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Seu membro BasicLimitInformation é uma estrutura JOBOBJECT_BASIC_LIMIT_INFORMATION .

JOB_OBJECT_LIMIT_JOB_MEMORY
0x00000200
Faz com que todos os processos associados ao trabalho limitem a soma em todo o trabalho de sua memória confirmada. Quando um processo tenta confirmar a memória que excederia o limite de todo o trabalho, ele falha. Se o objeto de trabalho estiver associado a uma porta de conclusão, uma mensagem JOB_OBJECT_MSG_JOB_MEMORY_LIMIT será enviada para a porta de conclusão.

Esse limite requer o uso de uma estrutura JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Seu membro BasicLimitInformation é uma estrutura JOBOBJECT_BASIC_LIMIT_INFORMATION .

Para se registrar para notificação quando esse limite for excedido, permitindo que os processos continuem a confirmar a memória, use a função SetInformationJobObject com a classe de informações JobObjectNotificationLimitInformation .

JOB_OBJECT_LIMIT_JOB_TIME
0x00000004
Estabelece um limite de tempo de execução no modo de usuário para o trabalho. O membro PerJobUserTimeLimit contém informações adicionais. Esse sinalizador não pode ser usado com JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME.
JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
0x00002000
Faz com que todos os processos associados ao trabalho sejam encerrados quando o último identificador para o trabalho for fechado.

Esse limite requer o uso de uma estrutura JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Seu membro BasicLimitInformation é uma estrutura JOBOBJECT_BASIC_LIMIT_INFORMATION .

JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME
0x00000040
Preserva os limites de tempo de trabalho definidos anteriormente. Desde que esse sinalizador seja definido, você pode estabelecer um limite de tempo por trabalho uma vez e alterar outros limites em chamadas subsequentes. Esse sinalizador não pode ser usado com JOB_OBJECT_LIMIT_JOB_TIME.
JOB_OBJECT_LIMIT_PRIORITY_CLASS
0x00000020
Faz com que todos os processos associados ao trabalho usem a mesma classe de prioridade. Para obter mais informações, consulte Agendando prioridades. O membro PriorityClass contém informações adicionais.

Se o trabalho estiver aninhado, a classe de prioridade efetiva será a classe de prioridade mais baixa na cadeia de trabalhos.

JOB_OBJECT_LIMIT_PROCESS_MEMORY
0x00000100
Faz com que todos os processos associados ao trabalho limitem a memória confirmada. Quando um processo tenta confirmar a memória que excederia o limite por processo, ele falha. Se o objeto de trabalho estiver associado a uma porta de conclusão, uma mensagem JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT será enviada para a porta de conclusão.

Se o trabalho estiver aninhado, o limite de memória efetivo será o limite de memória mais restritivo na cadeia de trabalhos.

Esse limite requer o uso de uma estrutura JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Seu membro BasicLimitInformation é uma estrutura JOBOBJECT_BASIC_LIMIT_INFORMATION .

JOB_OBJECT_LIMIT_PROCESS_TIME
0x00000002
Estabelece um limite de tempo de execução no modo de usuário para cada processo ativo no momento e para todos os processos futuros associados ao trabalho. O membro PerProcessUserTimeLimit contém informações adicionais.
JOB_OBJECT_LIMIT_SCHEDULING_CLASS
0x00000080
Faz com que todos os processos no trabalho usem a mesma classe de agendamento. O membro SchedulingClass contém informações adicionais.

Se o trabalho estiver aninhado, a classe de agendamento efetiva será a classe de agendamento mais baixa na cadeia de trabalhos.

JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK
0x00001000
Permite que qualquer processo associado ao trabalho crie processos filho que não estão associados ao trabalho.

Se o trabalho estiver aninhado e seu objeto de trabalho imediato permitir a fuga, o processo filho se separará do objeto de trabalho imediato e de cada trabalho na cadeia de trabalho pai, subindo a hierarquia até atingir um trabalho que não permita a fuga. Se o objeto de trabalho imediato não permitir a separação, o processo filho não será interrompido mesmo que os trabalhos em sua cadeia de trabalho pai o permitam.

Esse limite requer o uso de uma estrutura JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Seu membro BasicLimitInformation é uma estrutura JOBOBJECT_BASIC_LIMIT_INFORMATION .

JOB_OBJECT_LIMIT_SUBSET_AFFINITY
0x00004000
Permite que os processos usem um subconjunto da afinidade do processador para todos os processos associados ao trabalho. Esse valor deve ser combinado com JOB_OBJECT_LIMIT_AFFINITY.

Windows Server 2008, Windows Vista, Windows Server 2003 e Windows XP: Esse sinalizador tem suporte a partir do Windows 7 e do Windows Server 2008 R2.

JOB_OBJECT_LIMIT_WORKINGSET
0x00000001
Faz com que todos os processos associados ao trabalho usem os mesmos tamanhos mínimo e máximo do conjunto de trabalho. Os membros MinimumWorkingSetSize e MaximumWorkingSetSize contêm informações adicionais.

Se o trabalho estiver aninhado, o tamanho efetivo do conjunto de trabalho será o menor tamanho do conjunto de trabalho na cadeia de trabalho.

MinimumWorkingSetSize

Se LimitFlagsespecificar JOB_OBJECT_LIMIT_WORKINGSET, esse membro será o tamanho mínimo do conjunto de trabalho em bytes para cada processo associado ao trabalho. Caso contrário, esse membro será ignorado.

Se MaximumWorkingSetSize for diferente de zero, MinimumWorkingSetSize não poderá ser zero.

MaximumWorkingSetSize

Se LimitFlagsespecificar JOB_OBJECT_LIMIT_WORKINGSET, esse membro será o tamanho máximo do conjunto de trabalho em bytes para cada processo associado ao trabalho. Caso contrário, esse membro será ignorado.

Se MinimumWorkingSetSize for diferente de zero, MaximumWorkingSetSize não poderá ser zero.

ActiveProcessLimit

Se LimitFlagsespecificar JOB_OBJECT_LIMIT_ACTIVE_PROCESS, esse membro será o limite de processo ativo para o trabalho. Caso contrário, esse membro será ignorado.

Se você tentar associar um processo a um trabalho e isso fizer com que a contagem de processos ativos exceda esse limite, o processo será encerrado e a associação falhará.

Affinity

Se LimitFlagsespecificar JOB_OBJECT_LIMIT_AFFINITY, esse membro será a afinidade do processador para todos os processos associados ao trabalho. Caso contrário, esse membro será ignorado.

A afinidade deve ser um subconjunto da máscara de afinidade do sistema obtida chamando a função GetProcessAffinityMask . A afinidade de cada thread é definida com esse valor, mas os threads são livres para definir posteriormente sua afinidade, desde que seja um subconjunto da máscara de afinidade especificada. Os processos não podem definir sua própria máscara de afinidade.

PriorityClass

Se LimitFlagsespecificar JOB_OBJECT_LIMIT_PRIORITY_CLASS, esse membro será a classe de prioridade para todos os processos associados ao trabalho. Caso contrário, esse membro será ignorado.

Processos e threads não podem modificar sua classe de prioridade. O processo de chamada deve habilitar o privilégio SE_INC_BASE_PRIORITY_NAME .

SchedulingClass

Se LimitFlagsespecificar JOB_OBJECT_LIMIT_SCHEDULING_CLASS, esse membro será a classe de agendamento para todos os processos associados ao trabalho. Caso contrário, esse membro será ignorado.

Os valores válidos são de 0 a 9. Use 0 para a classe de agendamento menos favorável em relação a outros threads e 9 para a classe de agendamento mais favorável em relação a outros threads. Por padrão, esse valor é 5. Para usar uma classe de agendamento maior que 5, o processo de chamada deve habilitar o privilégio SE_INC_BASE_PRIORITY_NAME .

Comentários

Os processos ainda podem esvaziar seus conjuntos de trabalho usando a função SetProcessWorkingSetSize com (SIZE_T)-1, mesmo quando JOB_OBJECT_LIMIT_WORKINGSET é usado. No entanto, você não pode usar SetProcessWorkingSetSize alterar o tamanho mínimo ou máximo do conjunto de trabalho de um processo em um objeto de trabalho.

O sistema incrementa a contagem de processos ativos quando você tenta associar um processo a um trabalho. Se o limite for excedido, o sistema diminuirá a contagem de processos ativos somente quando o processo for encerrado e todos os identificadores para o processo forem fechados. Portanto, se você tiver um identificador aberto para um processo que foi encerrado dessa maneira, não poderá associar nenhum novo processo até que o identificador seja fechado e a contagem de processos ativos esteja abaixo do limite.

Requisitos

   
Cliente mínimo com suporte Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 [somente aplicativos da área de trabalho]
Cabeçalho winnt.h (inclua Windows.h)

Confira também

GetProcessAffinityMask

JOBOBJECT_END_OF_JOB_TIME_INFORMATION

JOBOBJECT_EXTENDED_LIMIT_INFORMATION

JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION

QueryInformationJobObject

SetInformationJobObject

SetProcessWorkingSetSize