[Haskell-cafe] getChar + System.Cmd.system + threads causes hangups

Einar Karttunen ekarttun at cs.helsinki.fi
Mon Feb 20 11:49:25 EST 2006


Here is a version that works fine:


myRawSystem cmd args = do 
    (inP, outP, errP, pid) <- runInteractiveProcess cmd args Nothing Nothing
    hClose inP
    os <- pGetContents outP
    es <- pGetContents errP
    ec <- waitForProcess pid
    case ec of
      ExitSuccess   -> return ()
      ExitFailure e ->
          do hPutStrLn stderr ("Running process "++unwords (cmd:args)++" FAILED ("++show e++")")
             hPutStrLn stderr os
             hPutStrLn stderr es
             hPutStrLn stderr ("Raising error...")
             fail "Running external command failed"

pGetContents h = do
    mv <- newEmptyMVar
    let put [] = putMVar mv []
        put xs = last xs `seq` putMVar mv xs
    forkIO (hGetContents h >>= put)
    takeMVar mv



More information about the Haskell-Cafe mailing list