Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
VFORK(2)		      System Calls Manual		      VFORK(2)

       vfork - spawn new process in a virtual memory efficient way

       #include	<vfork.h>

       int vfork()

       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(2V), would
       have been to create a new system	context	for  an	 execve(2V).   vfork()
       differs	from  fork() in	that the child borrows the parent's memory and
       thread of control until a call to execve(2V), or	an exit	(either	 by  a
       call to exit(2V)	or abnormally.)	 The parent process is suspended while
       the child is using its resources.

       vfork() returns 0 in the	child's	context	and  (later)  the  process  ID
       (PID) of	the child in the parent's context.

       vfork()	can  normally  be used just like fork.	It does	not work, how-
       ever, to	return while running in	the child's context from the procedure
       which  called vfork() since the eventual	return from vfork() would then
       return to a no longer existent stack frame.  Be careful,	also, to  call
       _exit()	rather	than  exit()  if  you cannot execve, since exit() will
       flush and close standard	I/O channels, and thereby mess up  the	parent
       processes  standard I/O data structures.	 (Even with fork() it is wrong
       to call exit() since buffered data would	then be	flushed	twice.)

       On Sun-4	machines, the parent inherits the values of local and incoming
       argument	 registers from	the child.  Since this violates	the usual data
       flow properties of procedure calls, the file <vfork.h> must be included
       in programs that	are compiled using global optimization.

       On  success,  vfork()  returns  0  to the child process and returns the
       process ID of the child process to the  parent  process.	  On  failure,
       vfork()	returns	 -1  to	the parent process, sets errno to indicate the
       error, and no child process is created.

       execve(2V), exit(2V), fork(2V), ioctl(2), sigvec(2), wait(2V)

       This system call	will be	eliminated in a	future release.	 System	imple-
       mentation  changes  are	making	the  efficiency	 gain  of vfork() over
       fork(2V)	smaller.  The memory sharing semantics of vfork() can  be  ob-
       tained through other mechanisms.

       To  avoid a possible deadlock situation,	processes that are children in
       the middle of a vfork() are never  sent	SIGTTOU	 or  SIGTTIN  signals;
       rather,	output	or  ioctls are allowed and input attempts result in an
       EOF indication.

				21 January 1990			      VFORK(2)


Want to link to this manual page? Use this URL:

home | help