Provided by: manpages-de-dev_4.23.1-1_all bug

BEZEICHNUNG

       exit - ein normales Prozessende veranlassen

BIBLIOTHEK

       Standard-C-Bibliothek (libc, -lc)

ÜBERSICHT

       #include <stdlib.h>

       [[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 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ähigkeit │ MT-Unsicher race:exit │
       └─────────────────────────────────────────┴───────────────────────┴───────────────────────┘
       Die  Funktion  exit()  verwendet eine globale Variable, die nicht geschützt ist, daher ist
       sie nicht multithread-fähig.

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 übernommen wurde); siehe die Datei <sysexits.h>.

       Nach  exit()  muss  der  Exit-Status  an den Elternprozess übertragen werden. Es gibt drei
       Fälle:

       •  Falls der Elternprozess SA_NOCLDWAIT oder den Handler SIGCHLD auf SIG_IGN gesetzt  hat,
          wird der Status verworfen und das Kind stirbt sofort.

       •  Falls   der   Elternprozess  auf  das  Kind  wartete,  wird  er  über  den  Exit-Status
          benachrichtigt und das Kind stirbt sofort.

       •  Andernfalls wird  das  Kind  ein  »Zombie«-Prozess:  die  meisten  der  Ressourcen  des
          Prozessen  werden  neu genutzt, aber eine Position, die minimale Informationen über den
          Kindprozess (Beendigungstatus, Ressourcenverwendungsstatistik)  enthält,  wird  in  der
          Prozesstabelle  beibehalten.  Dies  erlaubt  es Elternprozessen, nachfolgend waitpid(2)
          (oder ähnliches) zu verwenden, um den Beendigungsstatus des Kindprozesses zu  erfahren;
          zu diesem Zeitpunkt wird die Zombiprozessposition freigegeben.

       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.

   An andere Prozesse gesandte Signale
       Falls  der  beendende  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.

       Außer in den obigen Fällen, bei denen der signalisierte Prozess ein  Kind  des  beendenden
       Prozesses  sein könnte, führt 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)

ÜBERSETZUNG

       Die   deutsche   Übersetzung    dieser    Handbuchseite    wurde    von    Stefan    Janke
       <gonzo@burg.studfb.unibw-muenchen.de>,   Chris   Leick   <c.leick@vollbio.de>   und  Helge
       Kreutzmann <debian@helgefjell.de> erstellt.

       Diese Übersetzung ist Freie Dokumentation;  lesen  Sie  die  GNU  General  Public  License
       Version  3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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 die Mailingliste der Übersetzer ⟨debian-l10n-german@lists.debian.org⟩.