exit(3) Library Functions Manual exit(3) NOM exit - Terminer normalement un processus BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include [[noreturn]] void exit(int status); DESCRIPTION La fonction exit() termine normalement un processus et l'octet de poids faible de statut (c'est-a-dire statut & 0xFF) est envoye au processus parent (consultez wait(2)). Toutes les fonctions enregistrees avec atexit(3) et on_exit(3) sont appelees 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 supplementaire a executer lors de la procedure de terminaison ; le nouvel enregistrement est ajoute au debut de la liste des fonctions qui restent a 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 executee et le processus de terminaison est abandonne (en particulier, le vidage des flux stdio(3)). Si une fonction a ete enregistree plusieurs fois avec atexit(3) ou on_exit(3), alors elle sera appelee aussi souvent qu'elle a ete enregistree. Tous les flux ouverts du type stdio(3) sont vides et fermes. Les fichiers crees par tmpfile(3) sont supprimes. La norme C specifie deux constantes EXIT_SUCCESS et EXIT_FAILURE qui peuvent etre passees a exit() pour indiquer respectivement une terminaison sans ou avec echec. VALEUR RENVOYEE La fonction exit() ne renvoie jamais de valeur. ATTRIBUTS Pour une explication des termes utilises dans cette section, consulter attributes(7). +---------------------+--------------------------+---------------------+ |Interface | Attribut | Valeur | +---------------------+--------------------------+---------------------+ |exit() | Securite des threads | MT-Unsafe race:exit | +---------------------+--------------------------+---------------------+ La fonction exit() utilise une variable globale non protegee et n'est donc pas sure dans un contexte multithread. STANDARDS C11, POSIX.1-2008. HISTORIQUE C89, POSIX.1-2001, SVr4, 4.3BSD. NOTES Le comportement n'est pas defini si une des fonctions enregistrees avec atexit(3) et on_exit(3) appelle exit() ou longjmp(3). Remarquez qu'un appel a execve(2) supprime les enregistrements crees en utilisant atexit(3) et on_exit(3). L'utilisation d'EXIT_SUCCESS et d'EXIT_FAILURE est legerement plus portable (vers des environnements non UNIX) que celle de zero et d'une valeur non nulle comme 1 ou -1. En particulier, le systeme VMS utilise une convention differente. BSD a tente de standardiser les codes de sortie (que certaines bibliotheques C telles que la bibliotheque C de GNU ont adoptes), consultez le fichier . Apres exit(), le statut doit etre transmis au processus parent. Il y a trois cas : - Si le parent a positionne SA_NOCLDWAIT ou a positionne SIGCHLD a SIG_IGN, le statut est abandonne et l'enfant meurt immediatement. - Si le parent attendait l'enfant, il est informe du statut de sortie et l'enfant meurt immediatement. - Autrement, l'enfant devient un processus << zombie >> : la plupart des ressources du processus sont reutilisees mais un emplacement contenant les informations minimales du processus enfant (statut de terminaison, statistiques d'utilisation des ressources) est conserve dans la table de processus. Cela permet au parent d'utiliser par la suite waitpid(2) (ou similaire) afin de connaitre le statut de terminaison de l'enfant ; apres quoi l'emplacement du processus << zombie >> est libere. Si l'implementation gere le signal SIGCHLD, celui-ci est envoye au processus parent. Si le parent a defini SA_NOCLDWAIT, il n'est pas precise si SIGCHLD est envoye ou non. Signaux envoyes a d'autres processus Si le processus est un leader de session et si son terminal de controle est le terminal de controle de la session, alors chaque processus du groupe de processus en avant-plan de ce terminal recoit un signal SIGHUP et le terminal est dissocie de cette session, lui permettant d'etre acquis par un nouveau processus de controle. Si la fin du processus rend orphelin un groupe de processus et si un membre quelconque de ce groupe de processus nouvellement orphelin est arrete, 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 a part les cas susmentionnes, pour lesquels les processus ayant recu un signal peuvent etre des enfants du processus termine, la terminaison d'un processus ne cause pas en general l'envoi d'un signal aux enfants de ce processus. Cependant, un processus peut utiliser l'operation PR_SET_PDEATHSIG de prctl(2) pour faire en sorte qu'ils recoivent un signal si le parent se termine. VOIR AUSSI _exit(2), get_robust_list(2), setpgid(2), wait(2), atexit(3), on_exit(3), tmpfile(3) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Gregoire Scano Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.9.1 2 mai 2024 exit(3)