Linux and UNIX Man Pages

Linux & Unix Commands - Search Man Pages

pthread_atfork(3) [osx man page]

PTHREAD_ATFORK(3)					   BSD Library Functions Manual 					 PTHREAD_ATFORK(3)

NAME
pthread_atfork -- register handlers to be called before and after fork() SYNOPSIS
#include <pthread.h> int pthread_atfork(void (*prepare)(void), void (*parent)(void), void (*child)(void)); DESCRIPTION
The pthread_atfork() function is used to register functions to be called before and after fork(). The prepare handler is called before fork(), while the parent and child handlers are called after fork() in the parent and child process respectively. The prepare handlers are called in reverse order of their registration, while parent and child handlers are called in the order in which they were registered. Any of the handlers may be NULL. Important: only async-signal-safe functions are allowed on the child side of fork(). See sigaction(2) 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
pthread_atfork() will fail if: [ENOMEM] The system lacked the necessary resources to add another handler to the list. SEE ALSO
fork(2) STANDARDS
pthread_atfork() conforms to ISO/IEC 9945-1:1996 (``POSIX.1''). BSD
August 12, 2004 BSD

Check Out this Related Man Page

PTHREAD_ATFORK(3)					   BSD Library Functions Manual 					 PTHREAD_ATFORK(3)

NAME
pthread_atfork -- register handlers to be called when process forks LIBRARY
Standard C Library (libc, -lc) SYNOPSIS
#include <pthread.h> int pthread_atfork(void (*prepare)(void), void (*parent)(void), void (*child)(void)); DESCRIPTION
The 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 hap- pens, 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. RETURN VALUES
The pthread_atfork() function returns 0 on success and an error number on failure. ERRORS
The following error code may be returned: [ENOMEM] Insufficient memory exists to register the fork handlers. SEE ALSO
fork(2) STANDARDS
The pthread_atfork() function conforms to IEEE Std 1003.1c-1995 (``POSIX.1''). HISTORY
The pthread_atfork() function first appeared in NetBSD 2.0. CAVEATS
After calling fork(2) from a multithreaded process, it is only safe to call async-signal-safe functions until calling one of the exec(3) functions. The pthread_*() functions are not async-signal-safe, so it is not safe to use such functions in the child handler. BUGS
There is no way to unregister a handler registered with pthread_atfork(). BSD
February 12, 2003 BSD
Man Page

15 More Discussions You Might Find Interesting

1. Programming

signal handler for SIGCHLD

Hi, I have an c++ application which uses the function fork and execvp(). The parent does not wait until the child ends. The parents just creates children and let them do their stuff. You can see the parent program as a batch-manager. I have added a SIGCHLD handler to the program: void... (3 Replies)
Discussion started by: jens
3 Replies

2. Programming

Need urgent help with fork()

Hy! I must wrote some code with fork() command. The thing is that i have a while statement which count till 10. I must wrote a program that one child has only one parent. So one parent has only one child and one child has only one parent. Can you please help me with these code. int main()... (2 Replies)
Discussion started by: davidoff
2 Replies

3. Programming

Trouble with using fork()

Hello guys, I m working on a chat program with C. I finished the iterative server and it's working well. But once I add fork(), I met problems. I cannot use close or exit, otherwise I cannot accept new connection in next loop. here is my code: . . . Listen(simpleSocket, 5); ... (3 Replies)
Discussion started by: EltonSky
3 Replies

4. Programming

fork multiple shells

Hi, i was trying to play with fork,exec and signal for spawning multiple new shells, but it seems that i'm doing blunder somewhere. <sample code> 1 /* 2 * The idea is to fork multpile(equal to $ULIMIT) childs 3 * and replace their images with process:csh 4 * during this the parent... (3 Replies)
Discussion started by: amit4g
3 Replies

5. Programming

A small question about fork()

Hello experts, I am using fork() in my code but I am confused which output comes first child or parent? I did the following code .My book shows parent first but my linux shows child first.Can anyone tell me why? #include <stdio.h> int main(){ int pid; printf("I am original process with pid... (5 Replies)
Discussion started by: mlhazan
5 Replies

6. Programming

Using Signals

How can use signals in a C program If i want a child program to signal it's parent program that it(child) program has completed the task that it was assigned.:confused: (2 Replies)
Discussion started by: kapilv
2 Replies

7. UNIX for Dummies Questions & Answers

simple fork() problem

I have this little program ... int main(void){ printf("Before"); fork(); printf("After"); } output is this..... BeforeAfterBeforeAfter Shouldnt it be.....BeforeAfterAfter After parent is forked child receives the copy of program and continues from next statement... (3 Replies)
Discussion started by: joker40
3 Replies

8. Programming

Problem with execution of fork system call if i use \n

hi all, i tried the following source codes: fork1.c: main() { printf("demo of fork\n"); fork(); printf("hello"); } output: demo of fork hello hello fork2.c: main() (3 Replies)
Discussion started by: pnirmala
3 Replies

9. Programming

help in C of fork() problem

i am a beginner of C, and i tired to fork multiple child and all of them belongs to same parents and each of child responsible for printing individual data. but i don't have any idea how to do...... Can any body help? thanks a lot really. (7 Replies)
Discussion started by: wendy1089
7 Replies

10. Programming

parent called more times - fork - C language

Hi gurus can you explain following lines of code ? #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> int main(void) { pid_t pid; int rv; switch(pid = fork()) { case -1: ... (7 Replies)
Discussion started by: wakatana
7 Replies

11. UNIX for Advanced & Expert Users

Doubt with fork() system call

Hi I wrote a simple fork program to illustrate the fork() system cal. here it is #include<stdio.h> #include<sys/stat.h> #include<sys/types.h> main() { int flag; flag=fork(); if(flag==0) { printf("Child \n"); printf("Process id= %d\n",getpid()); ... (3 Replies)
Discussion started by: badsha6642
3 Replies

12. Shell Programming and Scripting

fork in perl

Can someone tell me perl fork example please. I tried online but could not get proper documentation. (2 Replies)
Discussion started by: Anjan1
2 Replies

13. Programming

problem with mutltiple fork()

Hi, can someone please help me with creating mutltiple fork.. I was expecting something like this: I am a child: 1 PID: 1215 I am a child: 2 PID: 1216 I am a child: 3 PID: 1217 I am a child: 4 PID: 1218 I am a child: 5 PID: 1219 I am a child: 6 PID: 1215 I am a child: 7 PID: 1216 I am a... (4 Replies)
Discussion started by: Placenzo
4 Replies

14. Programming

Multiplying 2D arrays using fork()

HI, i am trying to multiply 2 2D arrays (a,b) using fork. The answer will be at c. Each child have to calculate 1 row of c. The code is right, as i think of it, with no errors but i dont get the correct c array... I think there is maybe a mistake in i dimension ... Anyway, here is the code: ... (16 Replies)
Discussion started by: giampoul
16 Replies

15. Programming

two-way piping values between parent and child

Hello everyone. I'm pretty new to the topic of fork(), pipe() etc. All day I've been trying to make my code execute but it doesn't seem to be working the way I understand it. :wall: Anyway, my task is: Create a child process that will recive from its parent two intiger values. Than it will... (5 Replies)
Discussion started by: jakubs11
5 Replies