EXIT(3) 2007 EXIT(3)
exit - causa un termine normale del processo
#include <stdlib.h>
void exit(int status);
La funzione exit() provoca il termine normale dei processi e il valore
di status & 0377 restituito al genitore (vedere wait(2)).
Tutte le funzioni registrate con atexit(3) e on_exit(3) sono chiamate,
in ordine inverso rispetto alla loro registrazione. ( possibile per
una di queste funzioni usare atexit(3) o on_exit(3) per registrare una
funzione aggiuntiva da eseguire durante il processo di uscita; la nuova
registrazione aggiunta all'inizio dell'elenco di funzioni che rimane
da chiamare). Se una di queste funzioni non restituisce niente (per
esempio, chiama _exit(2), o si termina da sola mandandosi un segnale),
non viene chiamata nessuna delle funzioni rimanenti, e la successiva
uscita in elaborazione (in particolare, lo svuotamento degli stream
stdio(3) streams) viene abbandonata. Se una funzione stata registrata
pi volte usando atexit(3) o on_exit(3), verr chiamata tante volte
quante sono le registrazioni.
Tutti gli stream stdio(3) aperti sono svuotati e chiusi. I file creati
con tmpfile(3) sono rimossi.
Il C standard specifica due costanti, EXIT_SUCCESS e EXIT_FAILURE, che
possono essere passate a exit() per indicare rispettivamente il suc-
cesso o l'insuccesso di una chiusura.
La funzione exit() non restituisce nulla.
SVr4, 4.3BSD, POSIX.1-2001.
Non definito cosa succede se una delle funzioni registrate usando
atexit(3) e on_exit(3) chiama exit() o longjmp(3).
L'uso di EXIT_SUCCESS e EXIT_FAILURE
leggermente pi portabile (verso ambienti non-Unix) di 0 e qualche val-
ore non-zero come 1 o -1. In particolare, VMS usa una convenzione dif-
ferente.
BSD ha tentato di standardizzare i codici di uscita; vedere il file
<sysexits.h>.
Dopo exit(), lo stato di uscita deve essere trasmesso al processo geni-
tore. Ci sono tre casi. Se il genitore ha impostato l'handler
SA_NOCLDWAIT, o l'handler SIGCHLD a SIG_IGN, lo stato scartato. Se il
genitore stava aspettando il processo figlio gli viene notificato lo
stato di uscita. In entrambi i casi il processo in uscita muore imme-
diatamente. Se il genitore non ha indicato che non gli interessa lo
stato di uscita, ma non in attesa, il processo in uscita diviene un
processo "zombie" (che non altro che un contenitore per il byte che
rappresenta lo stato di uscita), cos che il genitore possa apprendere
lo stato di uscita quando in seguito chiama una delle funzioni wait(2)
Se l'implementazione supporta il segnale SIGCHLD, questo segnale
inviato al genitore. Se il genitore ha settato SA_NOCLDWAIT, non
definito se il segnale SIGCHLD
inviato.
Se il processo un leader di sessione e il suo terminale di controllo
il terminale di controllo della sessione, allora a ciascun processo nel
gruppo dei processi in primo piano di questo terminale di controllo
viene mandato un segnale SIGHUP , e il terminale disassociato da
questa sessione, permettendone l'acquisizione da parte di un nuovo pro-
cesso controllante.
Se l'uscita del processo fa s che un gruppo di processo divenga orfano,
e se un qualunque membro del nuovo gruppo del processo orfano viene
fermato, allora verr mandato un segnale SIGHUP seguito da un segnale
SIGCONT a ciascun processo in questo gruppo di processo.
_exit(2), wait(2), atexit(3), on_exit(3), tmpfile(3)
giugno 12 EXIT(3)