#include <stdlib.h> [[noreturn]] void exit(int status);
Toutes les fonctions enregistrées avec atexit(3) et on_exit(3) sont appelées dans l'ordre inverse de leur enregistrement. Il est possible pour une de ces fonctions d'utiliser atexit(3) ou on_exit(3) pour enregistrer une fonction supplémentaire à exécuter lors de la procédure de terminaison ; le nouvel enregistrement est ajouté au début de la liste des fonctions qui restent à appeler. Si une de ces fonctions ne rend pas la main (car elle appelle _exit(2) ou se tue avec un signal par exemple), alors aucune des fonctions suivantes de la liste n'est exécutée et le processus de terminaison est abandonné (en particulier, le vidage des flux stdio(3)). Si une fonction a été enregistrée plusieurs fois avec atexit(3) ou on_exit(3), alors elle sera appelée aussi souvent qu'elle a été enregistrée.
Tous les flux ouverts du type stdio(3) sont vidés et fermés. Les fichiers créés par tmpfile(3) sont supprimés.
La norme C spécifie deux constantes EXIT_SUCCESS et EXIT_FAILURE qui peuvent être passées à exit() pour indiquer respectivement une terminaison sans ou avec échec.
| Interface | Attribut | Valeur |
| exit() | Sécurité des threads | MT-Unsafe race:exit |
La fonction exit() utilise une variable globale non protégée et n’est donc pas sûre dans un contexte multithread.
L'utilisation d'EXIT_SUCCESS et d'EXIT_FAILURE est légèrement plus portable (vers des environnements non UNIX) que celle de zéro et d'une valeur non nulle comme 1 ou -1. En particulier, le système VMS utilise une convention différente.
BSD a tenté de standardiser les codes de sortie (que certaines bibliothèques C telles que la bibliothèque C de GNU ont adoptés), consultez le fichier <sysexits.h>.
Après exit(), le statut doit être transmis au processus parent. Il y a trois cas :
Si l'implémentation gère le signal SIGCHLD, celui-ci est envoyé au processus parent. Si le parent a défini SA_NOCLDWAIT, il n'est pas précisé si SIGCHLD est envoyé ou non.
Si la fin du processus rend orphelin un groupe de processus et si un membre quelconque de ce groupe de processus nouvellement orphelin est arrêté, alors tous les processus de ce groupe vont recevoir SIGHUP suivi de SIGCONT. Consultez setpgid(2) pour plus d'informations sur les processus orphelins.
Mis à part les cas susmentionnés, pour lesquels les processus ayant reçu un signal peuvent être des enfants du processus terminé, la terminaison d'un processus ne cause pas en général l'envoi d'un signal aux enfants de ce processus. Cependant, un processus peut utiliser l'opération PR_SET_PDEATHSIG de prctl(2) pour faire en sorte qu'ils reçoivent un signal si le parent se termine.
Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à