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

FreeBSD Manual Pages

  
 
  

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

NAME
     vfork -- spawn new	process	and block parent

SYNOPSIS
     #include <unistd.h>

     pid_t
     vfork(void);

DESCRIPTION
     vfork() was originally used to create new processes without fully copying
     the address space of the old process, which is horrendously inefficient
     in	a paged	environment.  It was useful when the purpose of	fork(2)	would
     have been to create a new system context for an execve(2).	 Since fork(2)
     is	now efficient, even in the above case, the need	for vfork() has	dimin-
     ished.  vfork() differs from fork(2) in that the parent is	suspended un-
     til the child makes a call	to execve(2) or	an exit	(either	by a call to
     _exit(2) or abnormally).  In addition, fork handlers established using
     pthread_atfork(3) are not called when a multithreaded program calls
     vfork().

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

RETURN VALUES
     Same as for fork(2).

SEE ALSO
     execve(2),	fork(2), sigaction(2), wait(2)

HISTORY
     The vfork() function call appeared	in 3.0BSD with the additional seman-
     tics that the child process ran in	the memory of the parent until it
     called execve(2) or exited.  That sharing of memory was removed in
     4.4BSD, leaving just the semantics	of blocking the	parent until the child
     calls execve(2) or	exits.	On many	other systems the original behavior
     has been restored,	making this interface particularly unportable.

BUGS
     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 ioctl(2)	calls are allowed and input attempts result in
     an	end-of-file indication.

FreeBSD	13.0		      September	10, 2015		  FreeBSD 13.0

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

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

home | help