vfork instead of fork for fork+exec?

Charles Oliver Nutter charles.nutter at sun.com
Sat May 16 11:56:23 PDT 2009


Christos Zoulas wrote:
> On BSD vfork() does not share file descriptors, current working
> directory, and signals, and as the following program shows environment
> too so all the items are fine (and it is trivial to write code that
> proves this). If that was not the case (file descriptors were shared
> for example), vfork() would be useless.  Even the shell does not
> (because it cannot) use vfork() in every situation, but only when
> it can. I don't know if it is worth the trouble of using vfork()
> in java when it is possible, since fork() is not a very common
> operation in java programs (I think).

The reason it came up for me is that we're trying to make subprocess 
launching not suck in JRuby. For example, there's no way with current 
process APIs on the JVM to launch a program like vim that needs a real 
console to function properly. Using straight-up fork+exec allows that to 
work:

http://blog.headius.com/2009/05/fork-and-exec-on-jvm-jruby-to-rescue.html

Obviously doing this from a Ruby API wrapping a Java API wrapping libffi 
introduces some unpredictability into the time between the "fork" call 
and the "exec" call, and on Mac it fails to launch spuriously. So I have 
been exploring other options.

Anyway, it's not really BSD-specific, so feel free to email me offline 
to talk more about it.

- Charlie



More information about the bsd-port-dev mailing list