On Tue, Sep 4, 2012 at 9:39 PM, Mike Ledger <eleventynine@gmail.com> wrote:
You might have to use hGetContents, then waitForProcess, and then terminateProcess -- you can then check if the process is indeed terminated using getProcessExitCode.

Er?  When waitForProcess returns the process is dead; there's nothing to terminateProcess.  If you do it the other way around then you may not get full output.

For starters, I would not build up the CreateProcess record directly but use the "proc" record and override it with your I/O definitions.  I've been bit by this before (I think some older version of System.Process lacked useful predefined records?).

There is a severe gotcha here if you do things naively (like your example code does).  If there is more output than will fit in a pipe, *no* ordering of read / wait in a single thread will work without deadlocking; you have no choice but to do the read in a separate thread.  This is not a Haskell issue, it is how pipes work on POSIX systems.  (I don't know if Windows has the same problem.)

--
brandon s allbery                                      allbery.b@gmail.com
wandering unix systems administrator (available)     (412) 475-9364 vm/sms