vfork()
The typical fork()/exec() sequence is inefficient because fork() creates a copy of the data, heap, and stack area of the original process, which is then immediately discarded when exec() is called.
vfork()is intended to create a new process when the purpose of the new process is to exec() a new program. vfork() has the same calling sequence and the same return values as fork().
vfork() creates the new process, just like fork(), without fully copying the address space of the parent into the child, since the child won’t reference that address space -- the child just calls exec() right after the vfork().
Another difference between vfork() and fork() is that vfork() guarantees that the child runs first, until the child calls exec() or exit().