| PTHREAD_ATFORK(3) | Library Functions Manual | PTHREAD_ATFORK(3) | 
pthread_atfork —
#include <pthread.h>
int
  
  pthread_atfork(void
    (*prepare)(void), void
    (*parent)(void), void
    (*child)(void));
pthread_atfork() function registers the provided
  handler functions to be called when the
  fork(2) function is called. Each
  of the three handlers is called at a different place in the
  fork(2) sequence. The
  prepare handler is called in the parent process before
  the fork happens, the parent handler is called in the
  parent process after the fork has happened, and the
  child handler is called in the child process after the
  fork has happened. The parent and
  child handlers are called in the order in which they
  were registered, while the prepare handlers are called
  in reverse of the order in which they were registered.
Any of the handlers given may be NULL.
The intended use of pthread_atfork() is to
    provide a consistent state to a child process from a multithreaded parent
    process where locks may be acquired and released asynchronously with respect
    to the fork(2) call. Each
    subsystem with locks that are used in a child process should register
    handlers with pthread_atfork() that acquires those
    locks in the prepare handler and releases them in the
    parent handler.
pthread_atfork() function returns 0 on success and
  an error number on failure.
ENOMEM]pthread_atfork() function conforms to
  IEEE Std 1003.1c-1995 (“POSIX.1c”).
pthread_atfork() function first appeared in
  NetBSD 2.0.
pthread_*() functions are not
  async-signal-safe, so it is not safe to use such functions in the
  child handler. POSIX does not mandate that
  pthread_mutex_unlock() be async-signal-safe, but it is
  in NetBSD and thus safe to use within the
  child handler.
pthread_atfork().
| July 18, 2014 | NetBSD 9.4 |