exit
Section: C Library Functions (3)
Updated: 5 février 2023
Index
Return to Main Contents
NOM
exit - Terminer normalement un processus
BIBLIOTHÈQUE
Bibliothèque C standard (libc, -lc)
SYNOPSIS
#include <stdlib.h>
[[noreturn]] void exit(int status);
DESCRIPTION
La fonction exit() termine normalement un processus et l'octet de poids
faible de statut (c'est-à-dire statut & 0xFF) est envoyé au processus
parent (consultez wait(2)).
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.
VALEUR RENVOYÉE
La fonction exit() ne renvoie jamais de valeur.
ATTRIBUTS
Pour une explication des termes utilisés dans cette section, consulter
attributes(7).
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.
STANDARDS
POSIX.1-2001, POSIX.1-2008, C99, SVr4, 4.3BSD.
NOTES
Le comportement n'est pas défini si une des fonctions enregistrées avec
atexit(3) et on_exit(3) appelle exit() ou longjmp(3). Remarquez
qu'un appel à execve(2) supprime les enregistrements créés en utilisant
atexit(3) et on_exit(3).
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 le parent a positionné SA_NOCLDWAIT ou a positionné SIGCHLD à
SIG_IGN, le statut est abandonné et l'enfant meurt immédiatement.
- •
-
Si le parent attendait l'enfant, il est informé du statut de sortie et
l'enfant meurt immédiatement.
- •
-
Autrement, l'enfant devient un processus « zombie » : la plupart des
ressources du processus sont réutilisées mais un emplacement contenant les
informations minimales du processus enfant (statut de terminaison,
statistiques d'utilisation des ressources) est conservé dans la table de
processus. Cela permet au parent d'utiliser par la suite waitpid(2) (ou
similaire) afin de connaître le statut de terminaison de l'enfant ; après
quoi l'emplacement du processus « zombie » est libéré.
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.
Signaux envoyés à d'autres processus
Si le processus est un leader de session et si son terminal de contrôle est
le terminal de contrôle de la session, alors chaque processus du groupe de
processus en avant-plan de ce terminal reçoit un signal SIGHUP et le
terminal est dissocié de cette session, lui permettant d'être acquis par un
nouveau processus de contrôle.
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.
VOIR AUSSI
_exit(2), get_robust_list(2), setpgid(2), wait(2), atexit(3),
on_exit(3), tmpfile(3)
TRADUCTION
La traduction française de cette page de manuel a été créée par
Christophe Blaess <https://www.blaess.fr/christophe/>,
Stéphan Rafin <stephan.rafin@laposte.net>,
Thierry Vignaud <tvignaud@mandriva.com>,
François Micaux,
Alain Portal <aportal@univ-montp2.fr>,
Jean-Philippe Guérard <fevrier@tigreraye.org>,
Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>,
Julien Cristau <jcristau@debian.org>,
Thomas Huriaux <thomas.huriaux@gmail.com>,
Nicolas François <nicolas.francois@centraliens.net>,
Florentin Duneau <fduneau@gmail.com>,
Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,
Denis Barbier <barbier@debian.org>,
David Prévot <david@tilapin.org>
et
Grégoire Scano <gregoire.scano@malloc.fr>
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 à
Index
- NOM
-
- BIBLIOTHÈQUE
-
- SYNOPSIS
-
- DESCRIPTION
-
- VALEUR RENVOYÉE
-
- ATTRIBUTS
-
- STANDARDS
-
- NOTES
-
- Signaux envoyés à d'autres processus
-
- VOIR AUSSI
-
- TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 06:24:22 GMT, May 18, 2024