vfork instead of fork for fork+exec?

Charles Oliver Nutter charles.nutter at sun.com
Fri May 15 23:14:41 PDT 2009


Hi all!

I'm trying to hack together a raw fork+exec for JRuby users that allows 
them to launch subprocesses with the same stdin/stdout, like for REPLs 
that want to launch a functional 'vim' subprocess. While trying to 
investigate some inconsistencies in using FFI to do fork+exec on Darwin, 
I came across the vfork function:

      Vfork() can be used to create new processes without fully copying 
the address space of the old process,
      which is horrendously inefficient in a paged environment.  It is 
useful when the purpose of fork(2)
      would have been to create a new system context for an execve. 
Vfork() differs from fork in that the
      child borrows the parent's memory and thread of control until a 
call to execve(2) or an exit (either by
      a call to exit(2) or abnormally.)  The parent process is suspended 
while the child is using its
      resources.

I noticed this isn't used in the BSD port, which uses either fork1 or 
__sys_fork. Perhaps this would be a faster fork to use for 
process-launching?

- Charlie



More information about the bsd-port-dev mailing list