Niklas Hamb├╝chen | 24 Aug 16:10 2012

Handle close on GC leading to wrong reported exit codes?

According to System.IO, handles are automatically closed once they are

This served me well for files so far, but for processes, it gives me a
weird problem: If I don't prevent my stdErr handle from being
garbage-collected, the exit code reported by getProcessExitCode is just
wrong (for me, it's always ExitSuccess, no matter what the program does).

I posted this into #haskell and some poeple could not reproduce it, so I
wanted to ask the Cafe what happens if you run this and if you have an
idea why it happens to me.

Thank you

The following code gives an example.
You can see the real exit code with "./test; echo $?".

module Main where

import Control.Concurrent (threadDelay)
import System.Process
import System.IO
import System.Exit

run :: FilePath -> [String] -> IO (Handle, Handle, Handle, ProcessHandle)
run cmd args = do
  r <at> (i, o, e, p) <- runInteractiveProcess cmd args Nothing Nothing
  getProcessExitCode p >>= \me -> case me of
(Continue reading)