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

FreeBSD Manual Pages

  
 
  

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

NAME
       vfork - spawn new process in a virtual memory efficient way

SYNOPSIS
       #include	<vfork.h>

       int vfork()

DESCRIPTION
       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.

RETURN VALUES
       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.

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

BUGS
       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)

NAME | SYNOPSIS | DESCRIPTION | RETURN VALUES | SEE ALSO | BUGS

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=vfork&sektion=2&manpath=SunOS+4.1.3>

home | help