ATEXIT(3) Linux Programmer's Manual ATEXIT(3)
NAME
atexit - register a function to be called at normal process termination
SYNOPSIS
#include <stdlib.h>
int atexit(void (*function)(void));
DESCRIPTION
The atexit() function registers the given function to be called at normal process termina-
tion, either via exit(3) or via return from the program's main(). Functions so registered
are called in the reverse order of their registration; no arguments are passed.
The same function may be registered multiple times: it is called once for each registra-
tion.
POSIX.1-2001 requires that an implementation allow at least ATEXIT_MAX (32) such functions
to be registered. The actual limit supported by an implementation can be obtained using
sysconf(3).
When a child process is created via fork(2), it inherits copies of its parent's registra-
tions. Upon a successful call to one of the exec(3) functions, all registrations are
removed.
RETURN VALUE
The atexit() function returns the value 0 if successful; otherwise it returns a nonzero
value.
CONFORMING TO
SVr4, 4.3BSD, C89, C99, POSIX.1-2001.
NOTES
Functions registered using atexit() (and on_exit(3)) are not called if a process termi-
nates abnormally because of the delivery of a signal.
If one of the functions registered functions calls _exit(2), then any remaining functions
are not invoked, and the other process termination steps performed by exit(3) are not per-
formed.
POSIX.1-2001 says that the result of calling exit(3) more than once (i.e., calling exit(3)
within a function registered using atexit()) is undefined. On some systems (but not
Linux), this can result in an infinite recursion; portable programs should not invoke
exit(3) inside a function registered using atexit().
The atexit() and on_exit(3) functions register functions on the same list: at normal
process termination, the registered functions are invoked in reverse order of their regis-
tration by these two functions.
POSIX.1-2001 says that the result is undefined if longjmp(3) is used to terminate execu-
tion of one of the functions registered atexit().
Linux notes
Since glibc 2.2.3, atexit() (and on_exit(3)) can be used within a shared library to estab-
lish functions that are called when the shared library is unloaded.
EXAMPLE
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void
bye(void)
{
printf("That was all, folks\n");
}
int
main(void)
{
long a;
int i;
a = sysconf(_SC_ATEXIT_MAX);
printf("ATEXIT_MAX = %ld\n", a);
i = atexit(bye);
if (i != 0) {
fprintf(stderr, "cannot set exit function\n");
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
}
SEE ALSO
_exit(2), exit(3), on_exit(3)
COLOPHON
This page is part of release 3.53 of the Linux man-pages project. A description of the
project, and information about reporting bugs, can be found at
http://www.kernel.org/doc/man-pages/.
Linux 2008-12-05 ATEXIT(3)
Man(1) output converted with
man2html