vfork()
是过时的优化。在进行良好的内存管理之前,fork()
请先复制父代的内存,因此非常昂贵。因为在很多情况下,afork()
之后是exec()
,它会丢弃当前的内存映射并创建一个新的内存映射,因此这是不必要的开销。如今,fork()
不复制内存。它只是设置为“写时复制”,因此fork()
+exec()
与vfork()
+ 一样有效exec()
。clone()
是所使用的syscallfork()
。使用某些参数,它创建一个新进程,使用其他参数,它创建一个线程。它们之间的区别只是共享或不共享哪些数据结构(内存空间,处理器状态,堆栈,PID,打开的文件等)。



