Process library and signals

Glynn Clements glynn at gclements.plus.com
Mon Feb 7 14:09:29 EST 2005


Simon Marlow wrote:

> >> I think this covers most of the useful situations.  If you want to do
> >> the same thing in both parent and child, or handle in the parent and
> >> SIG_DFL in the child: use runProcess.  If you want to ignore in the
> >> parent and SIG_DFL in the child: use System.Cmd.{system,rawSystem}. 
> >> To handle in the parent and ignore in the child: unfortunately not
> >> directly supported.
> > 
> > As it stands, you can have whatever behaviour you want in the parent:
> > set the desired handling before calling system/rawSystem/runProcess
> > then set it back afterwards.
> > 
> > However, this will cease to be true for system/rawSystem if you change
> > them so that the child restores the handlers to their state upon
> > entry.
> 
> I don't understand...  is there a typo somewhere above?  Perhaps you
> meant "child" in the first paragraph?

Sorry; I wasn't thinking straight. That part of my message is
incorrect; changing the signal handling before calling
system/rawSystem won't help, because they force both cases.

If they were changed to behave like system(), the caller could
determine the *child* behaviour, but that's prone to a race condition,
so I doubt that it would be useful in practice.

> system/rawSystem now behave almost exactly like system() in C.  The only
> difference is that you can't ignore SIGINT/SIGQUIT in the child, but I
> can fix that if necessary.

I'm not sure how much it matters; system() isn't really of much use
for "real" programs anyhow.

-- 
Glynn Clements <glynn at gclements.plus.com>


More information about the Glasgow-haskell-users mailing list