Die Manpage atexit(3)
sagt der folgende:Kann der Exit-Code in einer mit atexit() registrierten Funktion geändert werden?
POSIX.1-2001 sagt, dass das Ergebnis von
exit(3)
mehr als einmal aufrufen (das heißt, ruftexit(3)
innerhalb einer Funktion mitatexit()
registriert) ist nicht definiert. Auf einigen Systemen (aber nicht unter Linux) kann dies zu einer unendlichen Rekursion führen. portable Programme solltenexit(3)
nicht in einer Funktion aufrufen, die unteratexit()
registriert ist.
Ich bin jedoch daran interessiert, den Exit-Code in einem Finalizer für mein Programm zu ändern. Die einzige Möglichkeit, dies zu erreichen, besteht darin, innerhalb meiner Finalisierungsfunktion exit()
aufzurufen, aber die man-Seite warnt ausdrücklich davor.
Gibt es eine praktische Gefahr, dies zu vermeiden? Gibt es Implementierungen, bei denen dieser Ansatz Probleme verursachen könnte? Noch besser, gibt es eine andere Möglichkeit, dies zu tun?