Introduzione ai sistemi operativi con UNIX
Prec 6. La comunicazione tra i processi Succ

6.4 exit, _exit

Come abbiamo accennato la funzione della libreria standard del C, exit(3), termina l'esecuzione di un processo in modo "pulito", ossia effettuando tutte le azioni che un buon programma dovrebbe preoccuparsi di fare prima di uscire, come svuotare i buffer di I/O, deallocare tutte le risorse usate (ad es. chiudere i file aperti, cancellare i file temporanei che non servono più, ecc.). Questa funzione elimina o termina un processo e va quindi vista un po' come la controparte della fork(2), che invece è l'unico modo per creare un nuovo processo:

void
     exit(int status);

Per fare il flush e poi chiudere i file aperti exit(3) chiama fclose(3). La terminazione vera e propria di un processo la fa la system call _exit(2), il cui nome è stato fatto iniziare con un underscore per non confonderla con exit(3). exit(3) chiama _exit(2) come sua ultima azione.

Questa funzione di <stdlib.h> rappresenta una prima semplice forma di comunicazione tra i processi, molto limitata in quando può essere usata da un processo figlio per segnalare la corretta terminazione o il tipo di errore verificatosi, ma solo all'atto della terminazione del processo figlio stesso.

Infatti il byte più basso dell'argomento status viene trasmesso al processo padre, come abbiamo visto parlando della wait(2).

La convenzione per l'argomento della exit(3) è che il valore 0 segnala una corretta terminazione, mentre un valore non nullo segnala una situazione anomala. Meglio ancora usare le costanti simboliche seguenti, definite in /usr/include/stdlib.h:

#define EXIT_FAILURE    1
#define EXIT_SUCCESS    0
Non ci sono indicazioni standard per quanto riguarda i valori di ritorno. Il file /usr/include/sysexits.h contiene alcune #define per valori di ritorno (vedere anche sysexits(3)): sarebbe consigliabile adottare questi valori invece di inventarsi una propria convenzione. Purtroppo però questo file è specifico di FreeBSD, perciò il suo uso rompe la portabilità con altre versioni di UNIX.
Prec Indice Succ
Riepilogo sull'uso dei semafori Livello superiore pipe, popen