Posix.runProcess
George Russell
ger@tzi.de
Wed, 19 Sep 2001 12:56:12 +0200
Volker Stolz wrote:
>
> In local.glasgow-haskell-users, you wrote:
> > I think Posix.runProcess should give access to the eventual exit state of
> > the process, if any. Two possible ways:
> >
> > (1) Change its result to IO (IO ExitCode), the inner action being something
> > that waits for the process to complete (without blocking all other threads!)
> > and returns the ExitCode.
> > (Even better would be to make the result just IO ExitCode but this might
> > be too incompatible for people who rely on runProcess returning at once.)
>
> It seems kind of hard to get the exitcode without calling wait() and thus
> blocking all threads. A solution I'm currently using is to install a SIGCHLD
> handler which grabs the exit-code of the/a forked process with
> Posix.getAnyProcessStatus. You could
> store these results in a mutable global object (MVar, or MVar (FiniteMap ..))
> and then retrieve the result.
Yes, but I get the feeling this aint gonna work on Windows, which is my whole
reason for wanting to switch to Posix.runProcess. Could something like this be
implemented on Windows?
>
> It would be possible to have runProcess to return (MVar ExitCode) *immediately*
> (so it doesn't break things), and only when you read the MVar you get (lightweight)
> suspended until the process exits.
Yes, this would quite satisfactory. Then I could fork off a GHC thread to do takeMVar.
>
> Of course another solution would be to implement all this inside of runProcess,
> so you *would* block until runProcess returns, unless you use forkIO.
Yuck.
I'm afraid I would also like to be able to kill the process launched by runProcess too,
if possible. Is this within Windows' capabilities?
George