Manpages

NOMBRE

exit − produce la terminación normal del programa

SINOPSIS

#include <stdlib.h>

void exit(int status);

DESCRIPCIÓN

La función exit produce la terminación normal del programa y la devolución de status & 0377 al proceso padre (véase wait(2)). Antes, se llama a todas las funciones registradas con atexit() y on_exit() en orden inverso a su registro, y todos los flujos abiertos se vuelcan y cierran. Los ficheros creados por tmpfile() son eliminados.

El estándar C especifica dos constantes EXIT_SUCCESS y EXIT_FAILURE que pueden ser pasadas a exit() para indicar una terminación con o sin éxito, respectivamente.

VALOR DEVUELTO

La función exit() no devuelve nada ni regresa.

CONFORME A

SVID 3, POSIX, BSD 4.3, ISO 9899 (’’ANSI C’’)

OBSERVACIONES

Durante el procesamiento de exit, es posible registrar funciones adicionales con atexit() y on_exit(). Siempre se elimina de la cadena de funciones registradas la última función registrada, y se invoca. Queda indefinido lo que pasa si durante este procesamiento se llama o bien a exit() o bien a longjmp().

El uso de EXIT_SUCCESS y EXIT_FAILURE es ligeramente más portable (para entornos no Unix) que el de 0 y algún valor distinto de cero como 1 o −1. En particular, VMS usa una convención diferente.

BSD ha intentado estandarizar códigos de salida - véase el fichero <sysexits.h>.

Después de exit(), el estado de salida debe ser transmitido al proceso padre. Se presentan tres casos. Si el padre tiene definido SA_NOCLDWAIT, o bien ha puesto como manejador de SIGCHLD a SIG_IGN, el estado se desecha. Si el padre estaba esperando al hijo se le notifica el estado de salida. En ambos casos el proceso que hace la llamada muere inmediatamente. Si el padre no ha indicado que no está interesado en el estado de salida, pero no se encuentra esperando, el proceso que termina se convierte en un proceso "zombie" (que no es sino un contenedor para el byte único que representa el estado de salida) por lo que el padre puede enterarse del estado de salida cuando llame más tarde a una de las funciones wait().

Si la implementación soporta la señal SIGCHLD, se envía esta señal al padre. Si el padre tiene definido SA_NOCLDWAIT, es indefinido si se envía esta señal SIGCHLD.

Si el grupo es líder de un grupo de procesos y su terminal de control es la terminal de control de la sesión, cada proceso que esté en primer plano dentro del grupo de procesos de esta terminal de control recibe una señal SIGHUP, y la terminal se desvincula de la sesión, permitiendo ser adquirida por un nuevo proceso controlador.

Si la salida del proceso provoca que un grupo de procesos se quede huérfano, y si cualquier miembro del grupo de procesos que se acaba de quedar huérfano es parado, se envía una señal SIGHUP seguida de una señal SIGCONT a cada proceso del grupo de procesos.

VÉASE TAMBIÉN

_exit(2), wait(2), atexit(3), on_exit(3), tmpfile(3)