exit(3) Library Functions Manual exit(3) BEZEICHNUNG exit - ein normales Prozessende veranlassen BIBLIOTHEK Standard-C-Bibliothek (libc, -lc) UBERSICHT #include [[noreturn]] void exit(int status); BESCHREIBUNG Die Funktion exit() veranlasst ein normales Prozessende und gibt das niederwertigste Byte von status (d.h. status & 0xFF) an den Elternprozess zuruck (siehe wait(2)). Die mit atexit(3) und on_exit(3) registrierten Funktionen werden in der umgekehrten Reihenfolge ihrer Registrierung aufgerufen. (Eine solche Funktion kann atexit(3) oder on_exit(3) aufrufen, um eine zusatzliche Funktion zu registrieren, die wahrend des Exit-Prozesses ausgefuhrt wird; die neue Registrierung wird am Anfang der Liste verbleibender Funktionen hinzugefugt, die noch aufgerufen werden.) Wenn eine dieser Funktionen nicht zuruckkehrt (z.B. wenn sie _exit(2) aufruft oder sich selbst mit einem Signal beendet), dann wird keine der verbleibenden Funktionen aufgerufen und die weitere Exit-Ausfuhrung (insbesondere Leeren von stdio(3)-Datenstromen) wird abgebrochen. Falls eine Funktion mehrmals mit atexit(3) oder on_exit(3) registriert wurde, dann wird sie so oft aufgerufen, wie sie registriert wurde. Alle offenen stdio(3)-Datenstrome werden geleert und geschlossen. Durch tmpfile(3) erzeugte Dateien werden entfernt. Der C-Standard spezifiziert zwei Konstanten, EXIT_SUCCESS und EXIT_FAILURE, die an exit() ubergeben werden und ein erfolgreiches beziehungsweise erfolgloses Beenden anzeigen. RUCKGABEWERT Die Funktion exit() kehrt nichts zuruck. ATTRIBUTE Siehe attributes(7) fur eine Erlauterung der in diesem Abschnitt verwandten Ausdrucke. +--------------------+-------------------------+-----------------------+ |Schnittstelle | Attribut | Wert | +--------------------+-------------------------+-----------------------+ |exit() | Multithread-Fahigkeit | MT-Unsicher race:exit | +--------------------+-------------------------+-----------------------+ Die Funktion exit() verwendet eine globale Variable, die nicht geschutzt ist, daher ist sie nicht multithread-fahig. STANDARDS C11, POSIX.1-2008. GESCHICHTE C89, POSIX.1-2001, SVr4, 4.3BSD. ANMERKUNGEN Das Verhalten ist undefiniert, wenn eine der mit atexit(3) und on_exit(3) registrierten Funktionen exit() oder longjmp(3) aufruft. Beachten Sie, dass ein Aufruf von execve(2) die mittels atexit(3) und on_exit(3) erstellten Registrierungen entfernt. EXIT_SUCCESS und EXIT_FAILURE zu benutzen ist etwas portierbarer (auf Nicht-UNIX-Umgebungen), als 0 und einen Wert ungleich Null wie 1 oder -1 zu verwenden. Insbesondere VMS hat andere Konventionen. BSD versuchte, die Exit-Codes zu standardisieren (was durch einige C-Bibliotheken wie die GNU-C-Bibliothek auch ubernommen wurde); siehe die Datei . Nach exit() muss der Exit-Status an den Elternprozess ubertragen werden. Es gibt drei Falle: o Falls der Elternprozess SA_NOCLDWAIT oder den Handler SIGCHLD auf SIG_IGN gesetzt hat, wird der Status verworfen und das Kind stirbt sofort. o Falls der Elternprozess auf das Kind wartete, wird er uber den Exit-Status benachrichtigt und das Kind stirbt sofort. o Andernfalls wird das Kind ein >>Zombie<<-Prozess: die meisten der Ressourcen des Prozessen werden neu genutzt, aber eine Position, die minimale Informationen uber den Kindprozess (Beendigungstatus, Ressourcenverwendungsstatistik) enthalt, wird in der Prozesstabelle beibehalten. Dies erlaubt es Elternprozessen, nachfolgend waitpid(2) (oder ahnliches) zu verwenden, um den Beendigungsstatus des Kindprozesses zu erfahren; zu diesem Zeitpunkt wird die Zombiprozessposition freigegeben. Wenn die Implementation das Signal SIGCHLD unterstutzt, wird dieses Signal an den Elternprozess gesandt. Falls der Elternprozess SA_NOCLDWAIT gesetzt hat, ist nicht definiert, ob ein SIGCHLD gesandt wird. An andere Prozesse gesandte Signale Falls der beendende Prozess der fuhrende Prozess der Sitzung ist und sein steuerndes Terminal das steuernde Terminal der Sitzung ist, dann wird jedem Prozess in der Vordergrund-Prozessgruppe dieses steuernden Terminals ein SIGHUP-Signal gesandt und das Terminal wird von dieser Sitzung gelost, was ermoglicht, dass es von einem neuen steuernden Prozess ubernommen wird. Falls das Beenden des Prozesses das Verwaisen einer Prozessgruppe verursacht und jedes Mitglied der neu verwaisten Gruppe gestoppt wird, dann wird ein SIGHUP-Signal gefolgt von einem SIGCONT-Signal an jeden Prozess in dieser Prozessgruppe gesandt. Lesen Sie setpgid(2), wenn Sie eine Erlauterung verwaister Prozessgruppen suchen. Ausser in den obigen Fallen, bei denen der signalisierte Prozess ein Kind des beendenden Prozesses sein konnte, fuhrt das Beenden von Prozesse im allgemeinen nicht dazu, dass ein Signal an die Kinder des Prozesses gesandt wird. Allerdings kann ein Prozess die Aktion prctl(2) PR_SET_PDEATHSIG verwenden, damit es ein Signal bekommt, wenn sein Elternprozess sich beendet. SIEHE AUCH _exit(2), get_robust_list(2), setpgid(2), wait(2), atexit(3), on_exit(3), tmpfile(3) UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Stefan Janke , Chris Leick und Helge Kreutzmann erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . Linux man-pages 6.06 31. Oktober 2023 exit(3)