fork與vfork調用時參數等都差不多,
但fork本質上是copy,vfork本質上是共享;
且vfork的效率較高,或者說空間利用率較高
一.fork
由父進程調用fork創建的子進程是父進程的副本,複製copy了父進程的數據段、BSS段、代碼段、堆空間、棧空間和文件描述符,成爲一個獨立的實體;
注:fork父子進程對局部變量(棧空間)執行復制操作,而對文件描述符的文件表項信息(文件的讀寫位置)則是共享使用的,即在fork函數創建的子進程與父進程共享文件偏移。
補充:BSS(Block Started by Symbol,未初始化的數據區,存放程序中未初始化的全局變量和靜態變量的一塊內存區域)
二、vfork
由父進程調用vfork創建的子進程共享share了父進程的所有資源,包括數據段、BSS段、代碼段、堆空間、棧空間和文件描述符等等。
參考:
《Linux高級程序設計(第2版)》楊宗德 鄧玉春編