vfork函数的调用序列和返回值与fork相同,但两者的语义不同。
vfork用于创建一个新进程,而该新进程的目的是exec一个新程序。程vfork与fork一样都创建一个子进程,但是它并不将父进程的地址空间完全复制到子进程中,因为子进程会立即调用exec (或exit),于是也就不会存访该地址空间。不过在子进程调用exec或exit之前,它在父进程的空间中行。
这种工作方式在某些UNIX的页式虚存实现中提高了效率(与在fork之后跟随exec,并采用在写时复制技术相类似)。
vfork和fork之间的另一个区别是:vfork保证子进程先运行,在它调用exec或exit之后父进程才可能被调度运行。(如果在调用这两个函数之前子进程依赖于父进程的进一步动作,则会导致死锁。)