"Alex Vinokur" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > > ----------------------- > CYGWIN_NT-5.0 1.5.18 > Windows 2000 > ---------------------- > > > /* --------------------- */ > void sigINT_handler1 (int sig_i) > { > fprintf (stderr, "sigINT_handler1: pid#%d ignores a signal %d\n", getpid(), > sig_i); > signal (SIGINT, sigINT_handler1); > } > > void sigINT_handler2 (int sig_i) > { > fprintf (stderr, "sigINT_handler2: pid#%d ignores a signal %d\n", getpid(), > sig_i); > signal (SIGINT, sigINT_handler2); > } > > int main() > // fragments of code > { > sigINT_handler1 (SIGINT); > > if (fork() > 0) // Parent > { > // Stuff > waitpid (pid, &status, 0); > } > else // Child > { > sigINT_handler2 (SIGINT); > execvp (<args>); > } > } > > Parent catchs SIGINT via sigINT_handler1, > but Child doesn't catch SIGINT via sigINT_handler2. > > How can Child catch SIGINT with its own signal handler? > > It seems that code below does that..
// ----------------------------- int foreground_flag = 1; /* 1 - foreground, 0 - backgroung */ int main () { while (1) { signal (SIGINT, SIG_IGN); pid = fork(); if (pid < 0) /* Error while fork */ { perror ("Unable to execute fork"); continue; } if (pid > 0) /* Parent */ { if (foreground_flag == 1) waitpid (pid, &status, 0); } else /* Child */ { if (foreground_flag) signal (SIGINT, SIG_DFL);} else signal (SIGINT, SIG_IGN); execvp (<args>); } } return 0; } // ----------------------------- -- Alex Vinokur email: alex DOT vinokur AT gmail DOT com http://mathforum.org/library/view/10978.html http://sourceforge.net/users/alexvn -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/