[Haskell-cafe] executeFile failing on macosx
Donn Cave
donn at avvanta.com
Tue May 18 13:11:36 EDT 2010
Quoth David Powell <david at drp.id.au>,
> Indeed System.Process does work for me. I had avoided it because it is a
> little more awkward to use it when you want the actual PIDs. I don't
> understand why System.Process.runProcess works for me, but executeFile does
> not. I did find this issue (for python)
> http://bugs.python.org/issue6800 which I think is the same thing I'm
> hitting and they also claim it is fixed
> in macosx 10.6.
>
> Anyway, I'll work with System.Process for now. Thanks for your help.
It looks to me like the principal difference between System.Process and
executeFile is that the former forks and execs in the same C function,
so the GHC runtime doesn't execute in the child process. From the OS,
that difference isn't significant, so I wouldn't look for a MacOS bug
here.
On the platform I'm using right now (Haiku), I see the same problem -
-threaded and executeFile fails with `Operation not allowed', but
-threaded and runProcess does not fail. I wish I understood this
better myself, but the problem appears to be something that the
runtime does after fork(). In a C program with multiple threads,
I get this error with a direct exec or a fork/exec, but not with a
fork/exec from the main thread.
With a -threaded Haskell program, +RTS -N<n> actually does not make
any difference, unless there's another value for <n> that I should
have used.
Is there a way to suppress extra GHC runtime threads, when compiled
with -threaded? I see three threads running, none of them spawned
by the application. Where would this be documented?
thanks,
Donn Cave, donn at avvanta.com
> On Mon, May 17, 2010 at 9:41 AM, Thomas Schilling
> <nominolo at googlemail.com>wrote:
>
>> Works fine on 10.6.3. If you run with +RTS -N2, though, you'll get
>> "forking not supported with +RTS -N<n> greater than 1"
>>
>> The reason for this is that forking won't copy over the threads which
>> means that the Haskell IO manager stops working (you'd have to somehow
>> reinitialise the RTS while leaving heap and runtime stacks in tact --
>> very tricky).
>>
>> I'm using http://hackage.haskell.org/package/process to run external
>> processes. I haven't had any problems with it.
More information about the Haskell-Cafe
mailing list