Proposal: overhaul System.Process

Duncan Coutts duncan.coutts at
Tue Apr 22 19:01:24 EDT 2008

On Tue, 2008-04-22 at 15:19 -0700, Simon Marlow wrote:
> I've made some improvements to System.Process that I'd like to get 
> feedback on.  Everything so far is backwards compatible in the sense 
> that I've only added to the API - everything that was there before is 
> still available, with the same semantics (except where bugs have been 
> fixed).
> Haddock for the proposed new System.Process:

Looks good.

> Summary of changes:
> Tue Apr 22 15:02:16 PDT 2008  Simon Marlow <simonmarhaskell at>
>    * Overhall System.Process
>     - fix #1780: pipes created by runInteractiveProcess are set
>       close-on-exec by default
>     - add a new, more general, form of process creation: createProcess
>       Each of stdin, stdout and stderr may individually be taken
>       from existing Handles or attached to new pipes.  Also it
>       has a nicer API.


>     - add readProcess from Don Stewart's newpopen package.  This
>       function behaves like C's popen().

I'll double check that we can use this in Cabal where we currently have
to implement something similar using #ifdef, doing it differntly for ghc
vs nhc/hugs due to different compilers implementing different apis and
the ghc api not being usable without pre-emptive threads (iirc).

Our current function is :: FilePath -> [String] -> IO (String, ExitCode)

So that connects stdin to /dev/null, I expect we can implement that in
terms of the new createProcess.

>     - Move System.Cmd.{system,rawSystem} into System.Process.  Later
>       we can depecate System.Cmd.

Do you suppose we can rename the system/rawSystem given that we're
already moving them from one module to another?

Just off the top of my head, how about "runShellCommand" & "runProgram",
better suggestions welcome.

>     - Don't use O_NONBLOCK for pipes, as it can confuse the process
>       attached to the pipe (requires a fix to GHC.Handle in the base
>       package).
>     - move the tests from the GHC testsuite into the package itself,
>       and add a couple more
>     - bump the version to 2.0

More information about the Libraries mailing list