exit(3) ein normales Prozessende veranlassen

ÜBERSICHT

#include <stdlib.h>


void exit(int status);

BESCHREIBUNG

Die Funktion exit() veranlasst ein normales Prozessende und gibt den Wert von status & 0377 an den Elternprozess zurück (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 zusätzliche Funktion zu registrieren, die während des Exit-Prozesses ausgeführt wird; die neue Registrierung wird am Anfang der Liste verbleibender Funktionen hinzugefügt, die noch aufgerufen werden.) Wenn eine dieser Funktionen nicht zurückkehrt (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-Ausführung (insbesondere Leeren von stdio(3)-Datenströmen) 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)-Datenströme 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() übergeben werden und ein erfolgreiches beziehungsweise erfolgloses Beenden anzeigen.

RÜCKGABEWERT

Die Funktion exit() kehrt nichts zurück.

ATTRIBUTE

Siehe attributes(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.
SchnittstelleAttributWert
exit() Multithread-FähigkeitMT-Unsafe race:exit

Die Funktion exit() verwendet eine globale Variable, die nicht geschützt ist, daher ist sie nicht multithread-fähig.

KONFORM ZU

POSIX.1-2001, POSIX.1-2008, C89, C99, SVr4, 4.3BSD.

ANMERKUNGEN

Es ist undefiniert, was geschieht, 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; siehe die Datei <sysexits.h>.

Nach exit() muss der Exit-Status an den Elternprozess übertragen werden. Dabei werden drei Fälle unterschieden. Falls beim Elternprozess SA_NOCLDWAIT gesetzt ist oder die SIGCHLD-Behandlungsroutine auf SIG_IGN gesetzt wurde, wird der Status verworfen. Wenn der Elternprozess auf den Kindprozess wartete, wird er über den Exit-Status benachrichtigt. In beiden Fällen »stirbt« der Prozess, der beendet wird, sofort. Falls der Elternprozess nicht angezeigt hat, dass er nicht am Exit-Status interessiert ist, aber nicht darauf wartet, dann wird der zu beendende Prozess in einen »Zombieprozess« verwandelt (was nichts anderes ist, als ein Behälter für einen einzelnen Wert, den Exit-Status), so dass der Elternprozess den Exit-Status erfahren kann, indem er später eine der wait(2)-Funktionen aufruft.

Wenn die Implementation das Signal SIGCHLD unterstützt, wird dieses Signal an den Elternprozess gesandt. Falls der Elternprozess SA_NOCLDWAIT gesetzt hat, ist nicht definiert, ob ein SIGCHLD gesandt wird.

Falls der Prozess der führende 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 gelöst, was ermöglicht, dass es von einem neuen steuernden Prozess übernommen 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 Erläuterung verwaister Prozessgruppen suchen.

KOLOPHON

Diese Seite ist Teil der Veröffentlichung 4.06 des Projekts Linux-man-pages. Eine Beschreibung des Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden sich unter https://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

Die deutsche Übersetzung dieser Handbuchseite wurde von Stefan Janke <[email protected]> und Chris Leick <[email protected]> erstellt.

Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.

Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an <[email protected]>.