Win32 process spawning, POpen and Hugs, revisited

Graham Klyne GK at ninebynine.org
Wed Mar 17 14:30:30 EST 2004


I didn't (yet) receive Simon's original message, but I did look in the 
archive [1], where the source code attachment shows up as a "non-text" .obj 
file.  So my comment may be based on incomplete information.

Is "forkProcess" in the sense of a Unix fork?  If so, this is something 
that is difficult to do cleanly on Windows -- normally, it requires the 
full Cygwin emulating environment, which as far as I'm concerned is a 
killer for deploying applications.  Theoretically, Windows NT kernel does 
have a facility to "clone" an entire process, complete with address space 
contents, but, as far as I'm aware this functionality is not exposed by the 
Win32 API.

(This is a shame, because the Unix fork model is extraordinarily elegant, 
and simplifies a whole raft of process-creation issues, but Windows is what 
we have to live with.)

#g
--

[1] http://www.haskell.org//pipermail/libraries/2004-March/001832.html


At 07:40 17/03/04 -0500, David Roundy wrote:
>On Wed, Mar 17, 2004 at 12:01:11PM -0000, Simon Marlow wrote:
> >
> > On a related note, I recently implemented a System.Process library on
> > Unix.  Source code attached.  The Windows implementation should be
> > relatively straightforward.  Porting it to Hugs will require
> > System.Posix.forkProcess, but I don't see any great difficulties there.
>
>...
>
> > I think this is a good platform-independent abstraction for process
> > management.  What do others think?
>
>Looks pretty good to me.  I'm currently using doing all my forking in C,
>since that seems the "easiest" way to go about it, particularly since I
>need to do it on both windows and POSIX systems (which I accomplish via
>#ifdefs).  But this is all very nasty code that I'd like to get rid of (or
>more likely, nest in another layer of #ifdefs to deal with old versions of
>ghc...).
>
>The only thing I'd like to check on that I can't tell about is whether
>passing stdin and stdout to runProcess will behave "correctly".  Some
>programs (e.g. gpg) can figure out how to get control of the tty by
>themselves (to ask for passwords in the case of gpg), but others (some
>versions of vi) will fail if their stdin and stdout correspond to a tty.
>It would be nice to be able to run "user-interactive" commands such as text
>editors in a safe and consistent manner.  I'm not clear from your code
>whether there will be a problem with passing stdin and stdout to
>runProcess.  If the process closes stdin, will it be closed for me? If the
>process changes the buffering of stdin, will that change it for me?
>Enquiring minds want to know! :)
>--
>David Roundy
>http://www.abridgegame.org
>_______________________________________________
>Libraries mailing list
>Libraries at haskell.org
>http://www.haskell.org/mailman/listinfo/libraries

------------
Graham Klyne
For email:
http://www.ninebynine.org/#Contact



More information about the Libraries mailing list