lkml.org 
[lkml]   [2008]   [Oct]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: 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



    \
     
     \ /
      Last update: 2008-10-29 14:19    [W:5.083 / U:0.456 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site