Compartir a través de


Función ExitProcess (processthreadsapi.h)

Finaliza el proceso de llamada y todos sus subprocesos.

Sintaxis

void ExitProcess(
  [in] UINT uExitCode
);

Parámetros

[in] uExitCode

Código de salida para el proceso y todos los subprocesos.

Valor devuelto

None

Observaciones

Use la función GetExitCodeProcess para recuperar el valor de salida del proceso. Use la función GetExitCodeThread para recuperar el valor de salida de un subproceso.

Al salir de un proceso, se produce lo siguiente:

  1. Todos los subprocesos del proceso, excepto el subproceso que realiza la llamada, finalizan su ejecución sin recibir una notificación de DLL_THREAD_DETACH.
  2. Los estados de todos los subprocesos terminados en el paso 1 se marcan.
  3. Se llama a las funciones de punto de entrada de todas las bibliotecas de vínculos dinámicos (DLL) cargadas con DLL_PROCESS_DETACH.
  4. Una vez que todos los archivos DLL adjuntos hayan ejecutado cualquier código de terminación de proceso, la función ExitProcess finaliza el proceso actual, incluido el subproceso que realiza la llamada.
  5. El estado del subproceso que llama se señala.
  6. Se cierran todos los identificadores de objeto abiertos por el proceso.
  7. El estado de finalización del proceso cambia de STILL_ACTIVE al valor de salida del proceso.
  8. El estado del objeto de proceso se señala, satisfaciendo los subprocesos que habían estado esperando a que finalice el proceso.
Si uno de los subprocesos terminados del proceso contiene un bloqueo y el código de desasociación de DLL en uno de los archivos DLL cargados intenta adquirir el mismo bloqueo, al llamar a ExitProcess se produce un interbloqueo. Por el contrario, si un proceso finaliza llamando a TerminateProcess, los archivos DLL a los que se adjunta el proceso no se notifican a la finalización del proceso. Por lo tanto, si no conoce el estado de todos los subprocesos del proceso, es mejor llamar a TerminateProcess que ExitProcess. Tenga en cuenta que la devolución de la función principal de una aplicación da como resultado una llamada a ExitProcess.

Llamar a ExitProcess en un archivo DLL puede provocar errores inesperados en la aplicación o en el sistema. Asegúrese de llamar a ExitProcess desde un archivo DLL solo si sabe qué aplicaciones o componentes del sistema cargarán el archivo DLL y que es seguro llamar a ExitProcess en este contexto.

Salir de un proceso no hace que finalicen los procesos secundarios.

Salir de un proceso no elimina necesariamente el objeto de proceso del sistema operativo. Cuando se cierra el último identificador del proceso, se elimina un objeto de proceso.

Ejemplos

Para obtener un ejemplo, consulte Creación de un proceso secundario con entrada y salida redirigidos.

Requisitos

Requisito Value
Cliente mínimo compatible Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado processthreadsapi.h (incluye Windows.h en Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)
Library Kernel32.lib
Archivo DLL Kernel32.dll

Vea también

CreateProcess

CreateRemoteThread

CreateThread

ExitThread

GetExitCodeProcess

GetExitCodeThread

OpenProcess

Funciones de proceso y subproceso

Procesos

TerminateProcess

Terminación de un proceso