exit(2) exit(2)
NAME
exit, exit - Prozeß beenden
SYNTAX
#include <stdlib.h>
void exit(int status);
#include <unistd.h>
void exit(int status);
BESCHREIBUNG
Die Funktion exit() ruft alle Funktionen auf, die durch die Funktion
atexit() eingetragen wurden, und zwar in der umgekehrten Reihenfolge
ihrer Eintragung.
Wenn eine durch atexit() eingetragene Funktion keinen Wert zurücklie-
fert, werden die übrigen eingetragenen Funktionen nicht mehr aufgeru-
fen und der exit-Prozeß stoppt.
Wenn exit() mehrmals aufgerufen wird, ist das Verhalten undefiniert.
Mit der Funktion exit() wird der Prozeß ohne diese Bereinigungsmaß-
nahmen beendet.
Nachdem alle eingetragenen Funktionen abgearbeitet sind, gibt exit()
alle Ausgabeströme aus, schließt alle offenen Datenströme und löscht
alle durch tmpfile() erstellten Dateien.
exit() und exit() beenden den aufrufenden Prozeß mit nachstehenden
Folgen:
- Alle im aufrufenden Prozeß offenen Dateien, Verzeichnisse und Mel-
dungsverzeichnisse werden geschlossen.
- Wenn der Vaterprozeß eines aufrufenden Prozesses wait(), wait3(),
waitid() oder waitpid() ausführt und weder das Flag SANOCLDWAIT
gesetzt noch SIGCHLD auf SIGIGN gesetzt ist, wird er von der Been-
digung des aufrufenden Prozesses benachrichtigt und die niederwer-
tigsten acht Bits (Bits 0377) von status werden zur Verfügung
gestellt. Wenn der Vaterprozeß sich nicht in einem Wartestatus
befindet, wird ihm der Status des Sohnprozesses zur Verfügung
gestellt, wenn der Vaterprozeß anschließend wait(), wait3(),
waitid() oder waitpid() ausführt.
- Wenn der Vaterprozeß eines aufrufenden Prozesses kein wait(), wait3(),
waitid() oder waitpid() ausführt und weder das Flag SANOCLDWAIT
gesetzt noch SIGCHLD auf SIGIGN gesetzt ist, wird der aufrufende
Prozeß in einen Zombie-Prozeß umgewandelt. Ein Zombie-Prozeß ist
ein inaktiver Prozeß, der später gelöscht wird, wenn der zugehörige
Vaterprozeß wait(), wait3(), waitid() oder waitpid() ausführt.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
exit(2) exit(2)
- Die Beendigung eines Prozesses bedeutet nicht, daß auch die zugehö-
rigen Sohnprozesse direkt beendet werden. Sohnprozesse werden in
bestimmten Fällen durch das Senden eines SIGHUP-Signals wie weiter
unten beschrieben indirekt beendet.
- Wenn die Implementierung das SIGCHLD-Signal unterstützt, wird ein
SIGCHLD-Signal an den Vaterprozeß gesendet.
- Die Vaterprozeß-ID aller vorhandenen Sohn- und Zombie-Prozesse des
aufrufenden Prozesses wird auf 1 gesetzt. Dies bedeutet, daß der
Initialisierungsprozeß jeden dieser Prozesse erbt.
- Die Abbildung für jedes im Speicher abgebildete Objekt wird zurück-
genommen.
- Jedes angeschlossene, gemeinsam benutzte Speichersegment (Shared
Memory Segment) wird abgehängt, und der Wert von shmnattach in der
Datenstruktur, die der Kennung dieses Segments zugeordnet ist, wird
um 1 verringert.
- Für jedes Semaphor, für das der aufrufende Prozeß einen semadj-Wert
gesetzt hat [siehe semop(2)], wird dieser semadj-Wert zum semval
des angegebenen Semaphors hinzugefügt.
- Wenn der Prozeß eine Prozeß-, Text- oder Datensperre hat, wird ein
UNLOCK ausgeführt [siehe plock(2)].
- Wenn die Prozeßabrechnungsroutine des Systems eingeschaltet ist,
wird ein Abrechnungssatz in die Abrechnungsdatei geschrieben [siehe
acct(2)].
- Wenn der Prozeß ein steuernder Prozeß ist, wird SIGHUP an die Pro-
zeßgruppe im Vordergrund seines steuernden Terminals gesendet, und
sein steuerndes Terminal wird freigegeben.
- Wenn der Prozeß ein steuernder Prozeß ist, wird die Zuordnung des
steuernden Terminals zur Sitzung aufgehoben, so daß das Terminal
von einem neuen steuernden Prozeß verwendet werden kann.
- Wenn der aufrufende Prozeß irgendwelche angehaltenen Sohnprozesse
hat, deren Prozeßgruppe verwaist, wenn der aufrufende Prozeß been-
det wird, oder wenn der aufrufende Prozeß Element einer Prozeß-
gruppe ist, die verwaist, wenn der aufrufende Prozeß beendet wird,
werden dieser Prozeßgruppe die Signale SIGHUP und SIGCONT gesendet.
- Wenn für den Vaterprozeß das Flag SANOCLDWAIT oder SIGCHLD auf
SIGIGN gesetzt ist, wird der Status gelöscht, und der aufrufende
Prozeß wird direkt beendet.
Die Symbole EXITSUCCESS und EXITFAILURE sind in stdlib.h definiert
und können als Wert von status verwendet werden, um erfolgreiches oder
nicht erfolgreiches Beenden anzuzeigen.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
exit(2) exit(2)
HINWEISE
Siehe signal(2), Abschnitt HINWEISE.
SIEHE AUCH
acct(2), plock(2), semop(2), sigaction(2), signal(2), times(2),
wait(2), atexit(3C).
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98