
On Sat, Apr 10, 2010 at 08:43:39PM +0200, Matthias Kilian wrote:
after updating xmonad on my OpenBSD machine from 0.7 to 0.9.1 (built with ghc-6.12.2-rc1), I noticed that xmonad now leaves zombie processes around, [...]
The below part from Core.hs is completely wrong, you can't just ignore SIGCHLD and hope for some deity cleaning up the mess. And, BTW the default action of SIGCHLD is SIG_IGN, so both calls of `installHandler sigCHLD ...' are equivalent (and thus bogus). (I can't fix this right now, since I'm still waiting for a ghc rebuild on my machine) Ciao, Kili -- | Ignore SIGPIPE to avoid termination when a pipe is full, and SIGCHLD to -- avoid zombie processes, and clean up any extant zombie processes. installSignalHandlers :: MonadIO m => m () installSignalHandlers = io $ do installHandler openEndedPipe Ignore Nothing installHandler sigCHLD Ignore Nothing try $ fix $ \more -> do x <- getAnyProcessStatus False False when (isJust x) more return () uninstallSignalHandlers :: MonadIO m => m () uninstallSignalHandlers = io $ do installHandler openEndedPipe Default Nothing installHandler sigCHLD Default Nothing return ()