PTHREAD_ATFORK(3) | Library Functions Manual | PTHREAD_ATFORK(3)

# NAME

`pthread_atfork` — specify handler functions to call when the process forks

# SYNOPSIS

POSIX Threads Library (libpthread, -lpthread)
`#include <pthread.h>`

int
`pthread_atfork`(void (*prepare)(void), void (*parent)(void), void (*child)(void));

# DESCRIPTION

The `pthread_atfork`() function declares fork handlers to be called before and after fork(2), in the context of the thread that called fork(2). The prepare fork handler will be called before fork(2) processing commences. The parent fork handler will be called after fork(2) processing completes in the parent process. The child fork handler will be called after fork(2) processing completes in the child process. If no handling is desired at one or more of these three points, the corresponding fork handler address(es) may be set to `NULL`.

The order of calls to `pthread_atfork`() is significant. The parent and child fork handlers will be called in the order in which they were established by calls to `pthread_atfork`(). The prepare fork handlers will be called in the opposite order.

If a shared object is unloaded from process memory using dlclose(3), then any functions registered by calling `pthread_atfork`() from that shared object will be unregistered without being invoked. Note that it is the source of the call to `pthread_atfork`() that matters, not the source of the functions that were registered.

# RETURN VALUES

Upon successful completion, `pthread_atfork`() will return a value of zero. Otherwise, an error number will be returned to indicate the error.

# ERRORS

`pthread_atfork`() will fail if:

[`ENOMEM`]
  Insufficient table space exists to record the fork handler addresses. None of the handler lists are modified.

# SEE ALSO

fork(2), atexit(3), dlclose(3)

# STANDARDS

`pthread_atfork`() conforms to IEEE Std 1003.1-2004 (“POSIX.1”).

The behavior when a shared object is unloaded is an extension to that standard.

June 7, 2025 | Debian