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 |
---|---|
|
Estabelece um número máximo de processos ativos simultaneamente associados ao trabalho. O membro ActiveProcessLimit contém informações adicionais. |
|
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. |
|
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 . |
|
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 . |
|
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 . |
|
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. |
|
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 . |
|
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. |
|
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. |
|
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 . |
|
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. |
|
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. |
|
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 . |
|
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. |
|
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
JOBOBJECT_END_OF_JOB_TIME_INFORMATION
JOBOBJECT_EXTENDED_LIMIT_INFORMATION