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

FreeBSD Manual Pages


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

       vfork - spawn new process; share	virtual	memory

       is  a  higher  performance  version of that is provided on some systems
       where a performance advantage can be attained.

       If the calling process  is  multi-threaded,  the	 newly	created	 child
       process will only contain one thread. This one thread will be a copy of
       the thread calling

       differs from only in that the child process can	share  code  and  data
       with  the calling process (parent process).  This speeds	cloning	activ-
       ity significantly at a risk to the integrity of the parent  process  if
       is misused.

       The  use	 of  for any purpose except as a prelude to an immediate or is
       not supported.  Any program that	relies upon  the  differences  between
       and is not portable across HP-UX	systems.

       All  HP-UX implementations must provide the entry but it	is permissible
       for them	to treat it identically	to On some implementations the two are
       not  distinguished because the implementation is	as efficient as	possi-
       ble.  Other versions may	do the same to avoid the overhead of  support-
       ing two similar calls.

       can  be	used to	create new processes without fully copying the address
       space of	the old	process.  If a forked process is simply	going to do an
       (see exec(2)), the data space copied from the parent to the child by is
       not used.  This is particularly inefficient  in	a  paged  environment,
       making is particularly useful.  Depending upon the size of the parent's
       data space, can give a significant performance improvement over

       differs from in that the	child borrows the parent's memory  and	thread
       of  control  until  a call to or	an exit	(either	by a call to or	abnor-
       mally (see exec(2) and exit(2)).	 The parent process is suspended while
       the child is using its resources.

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

       can normally be used just like It does not  work,  however,  to	return
       while  running  in  the child's context from the	procedure which	called
       since the eventual return from would then return	to a no	 longer	 exis-
       tent  stack frame.  Be careful, also, to	call rather than if you	cannot
       since flushes and closes	standard I/O channels,	thereby	 damaging  the
       parent  process's standard I/O data structures.	(Even with it is wrong
       to call since buffered data would then be flushed twice.)

       The window begins at the	call and ends when  the	 child	completes  its

       Upon  successful	 completion, returns a value of	0 to the child process
       and returns the process ID of the child process to the parent  process.
       Otherwise, a value of -1	is returned to the parent, no child process is
       created,	and is set to indicate the error.

       fails and no child process is created if	any of	the  following	condi-
       tions are encountered:

	      [EAGAIN]	     The system-wide limit on the total	number of pro-
			     cesses under execution would be exceeded.

	      [EAGAIN]	     The system-imposed	limit on the total  number  of
			     processes	under execution	by a single user would
			     be	exceeded.

   Series 800
       Process times for the parent and	child processes	within the window  may
       be inaccurate.

	      Parent and child processes share the same	stack space within the
	      window.  If the size of the stack	has been changed  within  this
	      window  by the child process (return from	or call	to a function,
	      for example), it is likely that the parent and  child  processes
	      will be killed with signal or

	      In the window, a call to (see signal(2) that installs a catching
	      function can affect handling of the signal by the	 parent.   The
	      parent  is not affected if the handling is being set to or or if
	      either or	is used	(see sigaction(2) and sigvector(2)).

       was developed by	the University of California, Berkeley.

       exec(2),	exit(2), fork(2), wait(2).



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

home | help