multiple processes and threads

Simon Marlow simonmar@microsoft.com
Tue, 26 Feb 2002 12:41:41 -0000


> I have an application that uses multiple processes and=20
> multiple threads
> together.  What's the best way to detect child process terminations?
>=20
> The initial thread in the inital process serves as driver of the
> application.  It creates child processes and threads to carry out
> portions of the computation.  A natural way to have the driver detect
> termination of these child processes and threads would be to have the
> driver "listen" on a single MVar to which termination notices are
> "posted".  Child threads would simply post their termination notices
> directly.  For child processes, I'd like to have a single=20
> thread in the
> initial process execute (getAnyProcessStatus True False) repeatedly,
> posting a termination notice each time such a call returns.  However,
> with the current implementation of Concurrent Haskell, when the thread
> pends on the getAnyProcessStatus call, the entire initial process
> pends.  The best solution I've come up with so far, which is
> unsatisfying, is to have this thread poll periodically (that is, loop
> over (getAnyProcessStatus False False) and (threadDelay)).  Is there a
> better way?

One (possibly better) way is to listen for SIGCLD.  This has been =
discussed a couple of times before, threads here:

http://www.haskell.org/pipermail/glasgow-haskell-users/2001-July/002079.h=
tml

http://www.haskell.org/pipermail/glasgow-haskell-users/2001-September/002=
276.html

The upshot is the GHC *should* provide a better mechanism than it does =
currently, but it doesn't, sorry :-)

Cheers,
	Simon