Man Linux: Main Page and Category List


       pthread_atfork - register handlers to be called at fork(2) time


       #include <pthread.h>

       int  pthread_atfork(void  (*prepare)(void),  void (*parent)(void), void


       pthread_atfork registers handler functions to be called just before and
       just  after a new process is created with fork(2).  The prepare handler
       will be called from the parent process, just before the new process  is
       created.  The  parent  handler  will be called from the parent process,
       just before fork(2) returns. The child handler will be called from  the
       child process, just before fork(2) returns.

       One  or  several of the three handlers prepare, parent and child can be
       given as NULL, meaning that no  handler  needs  to  be  called  at  the
       corresponding point.

       pthread_atfork  can  be called several times to install several sets of
       handlers. At fork(2) time, the prepare  handlers  are  called  in  LIFO
       order (last added with pthread_atfork, first called before fork), while
       the parent and child handlers are called in FIFO  order  (first  added,
       first called).

       To  understand  the  purpose  of  pthread_atfork,  recall  that fork(2)
       duplicates the whole memory space, including mutexes in  their  current
       locking  state,  but  only  the  calling  thread: other threads are not
       running in the child process.  The mutexes are  not  usable  after  the
       fork  and  must  be  initialized  with  pthread_mutex_init in the child
       process.  This is a limitation of the current implementation and  might
       or might not be present in future versions.


       pthread_atfork returns 0 on success and a non-zero error code on error.


       ENOMEM insufficient memory available to register the handlers.


       Xavier Leroy <>


       fork(2), pthread_mutex_lock(3), pthread_mutex_unlock(3).