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

FreeBSD Manual Pages

  
 
  

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

NAME
       vfork --	create a new process without copying the address space

LIBRARY
       Standard	C Library (libc, -lc)

SYNOPSIS
       #include	<unistd.h>

       pid_t
       vfork(void);

DESCRIPTION
       Since this function is hard to use correctly from application software,
       it is recommended to use	posix_spawn(3) or fork(2) instead.

       The  vfork()  system  call  can be used to create new processes without
       fully copying the address space of the old process,  which  is  ineffi-
       cient 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(2).  The
       vfork() system call differs from	fork(2)	in that	the child borrows  the
       parent  process's  address space	and the	calling	thread's stack until a
       call to execve(2) or an exit (either by a call to  _exit(2)  or	abnor-
       mally).	 The  calling thread is	suspended while	the child is using its
       resources.  Other threads continue to run.

       The vfork() system call returns 0 in the	child's	 context  and  (later)
       the pid of the child in the parent's context.

       Many problems can occur when replacing fork(2) with vfork().  For exam-
       ple,  it	 does  not work	to return while	running	in the child's context
       from the	procedure that called vfork() since the	eventual  return  from
       vfork()	would  then return to a	no longer existent stack frame.	 Also,
       changing	process	state which is partially  implemented  in  user	 space
       such as signal handlers with libthr(3) will corrupt the parent's	state.

       Be  careful,  also,  to call _exit(2) rather than exit(3) if you	cannot
       execve(2), since	exit(3)	will flush and close  standard	I/O  channels,
       and  thereby mess up the	parent processes standard I/O data structures.
       (Even with fork(2) it is	wrong to  call	exit(3)	 since	buffered  data
       would then be flushed twice.)

RETURN VALUES
       Same as for fork(2).

SEE ALSO
       _exit(2), execve(2), fork(2), rfork(2), sigaction(2), wait(2), exit(3),
       posix_spawn(3)

HISTORY
       The vfork() system call appeared	in 3BSD.

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.2			 May 22, 2016			      VFORK(2)

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

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=vfork&sektion=2&manpath=FreeBSD+14.0-RELEASE+and+Ports>

home | help