Compartilhar via


Função ExitProcess (processthreadsapi.h)

Encerra o processo de chamada e todos os seus threads.

Sintaxe

void ExitProcess(
  [in] UINT uExitCode
);

Parâmetros

[in] uExitCode

O código de saída para o processo e todos os threads.

Retornar valor

Nenhum

Comentários

Use a função GetExitCodeProcess para recuperar o valor de saída do processo. Use a função GetExitCodeThread para recuperar o valor de saída de um thread.

Sair de um processo causa o seguinte:

  1. Todos os threads no processo, exceto o thread de chamada, encerram a execução sem receber uma notificação de DLL_THREAD_DETACH.
  2. Os estados de todos os threads encerrados na etapa 1 são sinalizados.
  3. As funções de ponto de entrada de todas as DLLs (bibliotecas de vínculo dinâmico) carregadas são chamadas com DLL_PROCESS_DETACH.
  4. Depois que todas as DLLs anexadas tiverem executado qualquer código de encerramento de processo, a função ExitProcess encerrará o processo atual, incluindo o thread de chamada.
  5. O estado do thread de chamada fica sinalizado.
  6. Todos os identificadores de objeto abertos pelo processo são fechados.
  7. O status de término do processo muda de STILL_ACTIVE para o valor de saída do processo.
  8. O estado do objeto de processo torna-se sinalizado, satisfazendo todos os threads que estavam aguardando o término do processo.
Se um dos threads encerrados no processo mantiver um bloqueio e a DLL desanexar o código em uma das DLLs carregadas tentar adquirir o mesmo bloqueio, chamar ExitProcess resultará em um deadlock. Por outro lado, se um processo for encerrado chamando TerminateProcess, as DLLs às quais o processo está anexado não serão notificadas sobre o encerramento do processo. Portanto, se você não souber o estado de todos os threads em seu processo, será melhor chamar TerminateProcess do que ExitProcess. Observe que retornar da função main de um aplicativo resulta em uma chamada para ExitProcess.

Chamar ExitProcess em uma DLL pode levar a erros inesperados do aplicativo ou do sistema. Lembre-se de chamar ExitProcess de uma DLL somente se você souber quais aplicativos ou componentes do sistema carregarão a DLL e se é seguro chamar ExitProcess nesse contexto.

Sair de um processo não faz com que os processos filho sejam encerrados.

Sair de um processo não remove necessariamente o objeto de processo do sistema operacional. Um objeto de processo é excluído quando o último identificador do processo é fechado.

Exemplos

Para obter um exemplo, consulte Criando um processo filho com entrada e saída redirecionadas.

Requisitos

Requisito Valor
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]
Plataforma de Destino Windows
Cabeçalho processthreadsapi.h (inclua Windows.h no Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)
Biblioteca Kernel32.lib
DLL Kernel32.dll

Confira também

CreateProcess

CreateRemoteThread

CreateThread

ExitThread

Getexitcodeprocess

GetExitCodeThread

Openprocess

Funções de thread e processo

Processos

TerminateProcess

Encerrando um processo