This is the mail archive of the
cygwin
mailing list for the Cygwin project.
Re: Signals, parent & children processes
- From: "Alex Vinokur" <alexvn at users dot sourceforge dot net>
- To: cygwin at cygwin dot com
- Date: Fri, 2 Dec 2005 19:27:58 +0200
- Subject: Re: Signals, parent & children processes
- References: <dmpslm$2sj$1@sea.gmane.org>
"Alex Vinokur" <alexvn@users.sourceforge.net> wrote in message dmpslm$2sj$1@sea.gmane.org">news:dmpslm$2sj$1@sea.gmane.org...
>
> -----------------------
> 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/