Messages in this thread Patch in this message | | | Date | Wed, 29 Oct 2008 08:17:36 -0500 | From | "Michael Kerrisk" <> | Subject | Re: parent process behaviour to signal after vfork() |
| |
On Tue, Oct 28, 2008 at 1:43 AM, Halesh S <halesh.s@india.com> wrote: > Hi, > > Please find the below test code... > > #include <stdio.h> > #include <stdlib.h> > #include <signal.h> > #include <unistd.h> > int x = 0; > typedef void (*sighandler_t)(int); > void fun() > { > printf("SIGNAL CAUGHT\n"); > } > > int main() > { > int pid; > > signal(SIGINT, (sighandler_t)fun); > signal(SIGSEGV, (sighandler_t)fun); > pid = vfork(); > > if ( pid == 0 ) { > printf(" I am child - %d \n", pid); > x++; > raise(SIGINT); > printf("x = %d\n", x); > exit(0); > } > else { > printf(" I am parent - %d\n", pid); > raise(SIGSEGV); > printf("x = %d\n", x); > } > } > > Why the parent process is not able to handle/respond the signals, when a child > once handles the signal, child is created using vfork(). > > In vfork() man page - > "Signals to the parent arrive after the child releases the parent's > memory." > > How to make sure that child has released the parent memory..??
That happens when the child does execve(2) or _exit(2). The man-page could be a little clearer on that point (it implies it, but not very clearly). For man-pages-3.12, I've made the change below.
Cheers,
Michael
diff --git a/man2/vfork.2 b/man2/vfork.2 index 55044ad..8a7ed50 100644 --- a/man2/vfork.2 +++ b/man2/vfork.2 @@ -94,7 +94,10 @@ but may call .PP Signal handlers are inherited, but not shared. Signals to the parent -arrive after the child releases the parent's memory. +arrive after the child releases the parent's memory (i.e., after the child calls +.BR _exit (2) +or +.BR execve (2)). .SS "Historic Description" Under Linux, .BR fork (2) -- Michael Kerrisk Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/ Found a documentation bug? http://www.kernel.org/doc/man-pages/reporting_bugs.html
| |