CINXE.COM
atexit
<html> <head> <title>atexit</title> <META NAME="KEYWORDS" CONTENT="atexit"> </head> <body BGCOLOR="#ffffff" LINK="#0000ff" VLINK="#0000ff" ALINK="#0000ff" TEXT="#000000"> <center> <h1><b>atexit</b></h1></center> <PRE> <STRONG><A HREF="/man3/ATEXIT">ATEXIT(3)</A></STRONG> Linux Programmer's Manual <STRONG><A HREF="/man3/ATEXIT">ATEXIT(3)</A></STRONG> 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 nor- mal process termination, either via <STRONG><A HREF="/man3/exit">exit(3)</A></STRONG> or via return from the pro- gram'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 registration. POSIX.1 requires that an implementation allow at least ATEXIT_MAX (32) such functions to be registered. The actual limit supported by an im- plementation can be obtained using <STRONG><A HREF="/man3/sysconf">sysconf(3)</A></STRONG>. When a child process is created via <STRONG><A HREF="/man2/fork">fork(2)</A></STRONG>, it inherits copies of its parent's registrations. Upon a successful call to one of the <STRONG><A HREF="/man3/exec">exec(3)</A></STRONG> functions, all registrations are removed. RETURN VALUE The atexit() function returns the value 0 if successful; otherwise it returns a nonzero value. ATTRIBUTES For an explanation of the terms used in this section, see at- <STRONG><A HREF="/man7/tributes">tributes(7)</A></STRONG>. +----------+---------------+---------+ |Interface | Attribute | Value | +----------+---------------+---------+ |atexit() | Thread safety | MT-Safe | +----------+---------------+---------+ CONFORMING TO POSIX.1-2001, POSIX.1-2008, C89, C99, SVr4, 4.3BSD. NOTES Functions registered using atexit() (and <STRONG><A HREF="/man3/on_exit">on_exit(3)</A></STRONG>) are not called if a process terminates abnormally because of the delivery of a signal. If one of the registered functions calls <STRONG><A HREF="/man2/_exit">_exit(2)</A></STRONG>, then any remaining functions are not invoked, and the other process termination steps per- formed by <STRONG><A HREF="/man3/exit">exit(3)</A></STRONG> are not performed. POSIX.1 says that the result of calling <STRONG><A HREF="/man3/exit">exit(3)</A></STRONG> more than once (i.e., calling <STRONG><A HREF="/man3/exit">exit(3)</A></STRONG> within a function registered using atexit()) is unde- fined. On some systems (but not Linux), this can result in an infinite recursion; portable programs should not invoke <STRONG><A HREF="/man3/exit">exit(3)</A></STRONG> inside a func- tion registered using atexit(). The atexit() and <STRONG><A HREF="/man3/on_exit">on_exit(3)</A></STRONG> functions register functions on the same list: at normal process termination, the registered functions are in- voked in reverse order of their registration by these two functions. According to POSIX.1, the result is undefined if <STRONG><A HREF="/man3/longjmp">longjmp(3)</A></STRONG> is used to terminate execution of one of the functions registered using atexit(). Linux notes Since glibc 2.2.3, atexit() (and <STRONG><A HREF="/man3/on_exit">on_exit(3)</A></STRONG>) can be used within a shared library to establish 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 <STRONG><A HREF="/man2/_exit">_exit(2)</A></STRONG>, <STRONG><A HREF="/man3/dlopen">dlopen(3)</A></STRONG>, <STRONG><A HREF="/man3/exit">exit(3)</A></STRONG>, <STRONG><A HREF="/man3/on_exit">on_exit(3)</A></STRONG> COLOPHON This page is part of release 5.05 of the Linux man-pages project. A description of the project, information about reporting bugs, and the latest version of this page, can be found at https://www.kernel.org/doc/man-pages/. Linux 2017-09-15 <STRONG><A HREF="/man3/ATEXIT">ATEXIT(3)</A></STRONG></PRE> <center> <h6>Man Pages Copyright Respective Owners. Site Copyright (C) 1994 - 2025 <a href="http://www.he.net">Hurricane Electric</a>. All Rights Reserved.</h6></center> </body> </html>