---
name: "pthread_atfork"
section: "3"
platform: "macos"
package: "libpthread"
version: "539.100.4"
release: "macOS 26.5"
platforms: ["linux", "freebsd", "macos"]
url: "https://new.carta.tech/pthread_atfork"
---

# pthread\_atfork(3)

register handlers to be called before and after fork()

## NAME

**pthread\_atfork** – register handlers to be called before and after **fork**()

## SYNOPSIS

**#include \<pthread.h\>**

*int*\

**pthread\_atfork**(*void \*preparevoid*, *void \*parentvoid*, *void \*childvoid*);

## DESCRIPTION

The **pthread\_atfork**() function declares fork handlers to be called before and after [fork(2)](/fork/2.md), in the context of the thread that called [fork(2)](/fork/2.md).

The handlers registered with **pthread\_atfork**() are called at the moments in time described below:

- *prepare*

  Before [fork(2)](/fork/2.md) processing commences in the parent process. If more than one *prepare* handler is registered they will be called in the opposite order they were registered.

- *parent*

  After [fork(2)](/fork/2.md) completes in the parent process. If more than one *parent* handler is registered they will be called in the same order they were registered.

- *child*

  After [fork(2)](/fork/2.md) processing completes in the child process. If more than one *child* handler is registered they will be called in the same order they were registered.

If no handling is desired at one or more of these three points, a null pointer may be passed as the corresponding fork handler.

*Important*: only async-signal-safe functions are allowed on the child side of **fork**(). See [sigaction(2)](/sigaction/2.md) for details.

## RETURN VALUES

If successful, the **pthread\_atfork**() function will return zero. Otherwise an error number will be returned to indicate the error.

## ERRORS

The **pthread\_atfork**() function will fail if:

- \[ENOMEM\]

  The system lacked the necessary resources to add another handler to the list.

## SEE ALSO

[fork(2)](/fork/2.md), [pthread(3)](/pthread/3.md)

## STANDARDS

The **pthread\_atfork**() conforms to ISO/IEC 9945-1:1996 (“POSIX.1”).
