Re: pipe question
- From: Mike Sangrey <mike sojurn lns pa us>
 
- To: gnome-devel-list gnome org
 
- Subject: Re: pipe question 
 
- Date: Mon, 02 Aug 1999 21:23:29 -0400
 
james@daa.com.au said:
> You want to set up a signal handler for SIGCHLD.  It will be called
> when a child process dies.  Just call wait() to get the child's exit
> status, then do something to make the rest of your program aware of
> that the child has died (set a variable to something, or add an idle
> function).  The signal handler should not run for too long though.
> James. 
The 'should not run for too long' is a good point.  One nice way to do
this is to have the sigchld handler do nothing more than set a flag,
I'll call it sigchld_flag.  Typically, the program is blocked on a
read in which case the read() will return with errno set to EINTR and
you can just check whether sigchld_flag was set. You shoud check for
EIO, too.
I usually set the signal to call set_sigchld_flag() and when I find
the flag is set I call sigchld_handler().  This way,
set_sigchld_flag() is short and sweet and sigchld_handler() can do
whatever it wants to:  send email, call home, and balance the
checkbook for the last 12 years.  You laugh, you don't know what
someone else might do to the code. 
-- 
Mike Sangrey
mike@sojurn.lns.pa.us
[
Date Prev][
Date Next]   [
Thread Prev][
Thread Next]   
[
Thread Index]
[
Date Index]
[
Author Index]