
according to documentation of System.Process.terminateProcess, "This function should not be used under normal circumstances." Well, then what function then *should* be used normally? I have the following code in a multithreaded Haskell program, which does not work (if this thread is killed, the external process keeps running after the Haskell program exits) bracket ( System.Process.runCommand cmd ) ( terminateProcess p ) ( polling_waitForProcess ) It took me a while to figure out why "waitForProcess" here does not work: Control.Concurrent.throwTo says "If the target thread is currently making a foreign call, then the exception will not be raised (and hence throwTo will not return until the call has completed.") That's why I defined let polling_waitForProcess p = do me <- getProcessExitCode p case me of Just e -> return () Nothing -> do threadDelay ( 10^5 ) polling_waitForProcess p any hints appreciated, J.W.