On Wed, Oct 27, 2004 at 12:56:12AM +0000, John Goerzen wrote: > If you follow this a little bit, you'll find that forkProcess is *NOT* > throwing the exception that is being reported here. The message is > being printed by the RTS of the child process. No exception is thrown > in the parent. (Believe me, I've tried to catch it!)
I don't have any idea what's happening here, except that it semes an obvious bug. I found that a work-around is to use exitImmediately in the child. This is often advisable after a fork anyway, because you don't want finalizers or atexit hooks to run in the child. Presumably, it is some such code causing the breakage, though I can't imagine how. On Wed, Oct 27, 2004 at 01:02:52AM +0000, John Goerzen wrote: > Yes. Its POSIX interface is, uhm, weird. I can't quite put my finger > on it, but things like setting up a pipe to a child process's stdin just > seem brittle and fragile with all sorts of weird errors. I can do this > in my sleep in C, Perl, or Python but in Haskell I can barely make it > work when I'm fully conscious :-) Actually, your bug aside, and despite minimal documentation, I've found the Posix modules straightforward. I wrote a version of system that returns the output of the command as a string, and it worked on the first try! I'm sure there are better versions around, but: system :: [String] -> IO String system (cmd:args) = do (read, write) <- createPipe pid <- forkProcess (closeFd read >> child write) closeFd write ret <- fdToHandle read >>= hGetContents length ret `seq` getProcessStatus True False pid return ret where child write = do dupTo write stdOutput closeFd write executeFile cmd True -- path args Nothing -- env Andrew _______________________________________________ Haskell-Cafe mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell-cafe