I managed to get runInteractiveProcess to work after all. Here is the code:
> import System.Posix.Signals > import System.IO hiding ( catch, try ) > import System.Exit ( ExitCode(..) ) > import System.Process > import Control.Concurrent > import Child -- http://cryp.to/child/Child.hs > > test :: IO () > test = do > installHandler sigCHLD (Catch (return ())) Nothing > (_,_,_, pid) <- runInteractiveProcess "/usr/bin/sleep" ["1"] Nothing Nothing > sleep 5 > safeGetExitCode pid >>= print > > safeGetExitCode :: ProcessHandle -> IO ExitCode > safeGetExitCode pid = > timeout (10*1000000) (getRCLoop) >>= > maybe (fail "timeout while waiting for external process") return > where > getRCLoop = getProcessExitCode pid >>= > maybe (sleep 1 >> getRCLoop) return The culprit seems to be: If you don't accept sigCHLD, you lose. If you use waitForProcess, you lose. Threaded RTS or not doesn't seem to make a difference. Peter _______________________________________________ Glasgow-haskell-users mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/glasgow-haskell-users