x SuSE Linux 13.1-RELEASE x
x SuSE Linux 13.1-RELEASEx
pthread_atfork(3) Library Functions Manual pthread_atfork(3)
NAME
pthread_atfork - register fork handlers
LIBRARY
POSIX threads library (libpthread, -lpthread)
SYNOPSIS
#include <pthread.h>
int pthread_atfork(void (*prepare)(void), void (*parent)(void),
void (*child)(void));
DESCRIPTION
The pthread_atfork() function registers fork handlers that are to be
executed when fork(2) is called by any thread in a process. The han-
dlers are executed in the context of the thread that calls fork(2).
Three kinds of handler can be registered:
o prepare specifies a handler that is executed in the parent process
before fork(2) processing starts.
o parent specifies a handler that is executed in the parent process
after fork(2) processing completes.
o child specifies a handler that is executed in the child process af-
ter fork(2) processing completes.
Any of the three arguments may be NULL if no handler is needed in the
corresponding phase of fork(2) processing.
RETURN VALUE
On success, pthread_atfork() returns zero. On error, it returns an er-
ror number. pthread_atfork() may be called multiple times by a process
to register additional handlers. The handlers for each phase are
called in a specified order: the prepare handlers are called in reverse
order of registration; the parent and child handlers are called in the
order of registration.
ERRORS
ENOMEM Could not allocate memory to record the fork handler list entry.
STANDARDS
POSIX.1-2008.
HISTORY
POSIX.1-2001.
NOTES
When fork(2) is called in a multithreaded process, only the calling
thread is duplicated in the child process. The original intention of
pthread_atfork() was to allow the child process to be returned to a
consistent state. For example, at the time of the call to fork(2),
other threads may have locked mutexes that are visible in the user-
space memory duplicated in the child. Such mutexes would never be un-
locked, since the threads that placed the locks are not duplicated in
the child. The intent of pthread_atfork() was to provide a mechanism
whereby the application (or a library) could ensure that mutexes and
other process and thread state would be restored to a consistent state.
In practice, this task is generally too difficult to be practicable.
After a fork(2) in a multithreaded process returns in the child, the
child should call only async-signal-safe functions (see sig-
nal-safety(7)) until such time as it calls execve(2) to execute a new
program.
POSIX.1 specifies that pthread_atfork() shall not fail with the error
EINTR.
SEE ALSO
fork(2), atexit(3), pthreads(7)
Linux man-pages 6.04 2023-03-30 pthread_atfork(3)
Want to link to this manual page? Use this URL:
<https://star2.abcm.com/cgi-bin/bsdi-man?query=pthread_atfork&sektion=3&manpath=>