8.4 vfork函数

vfork函数的调用序列和返回值与fork相同,但两者的语义不同。vfork起源于较早的4BSD虚存版本。在Leffler等〔1989〕的5.7节中指出:“虽然它是特别有效率的,但是vfork的语义很奇特,通常认为它具有结构上的缺陷。”尽管如此SVR4和4.3+BSD仍支持vfork。某些系统具有头文件,当调用vfork时,应当包括该头文件。

vfork用于创建一个新进程,而该新进程的目的是exec一个新程序(如上节(2)中一样)。程序1-5中的shell基本部分就是这种类型程序的一个例子。vfork与fork一样都创建一个子进程,但是它并不将父进程的地址空间完全复制到子进程中,因为子进程会立即调用exec(或exit)。想知道更多关于vfork和fork的区别?不妨看看深入解读Linux进程函数fork vfork execX一文,里面对这两者的区别进行了详细讲解。

在实际应用中,vfork虽然效率高,但因为它的奇特语义和结构上的缺陷,使得一些程序员在使用时会比较谨慎。更多关于vfork与fork的比较,可以参阅详解linux中fork vfork clone函数的区别浅谈Linux vfork与fork简单对比分析

于第8章进程控制