1.傳統的fork()函數
建立一個子進程,子進程和父進程共享正文段,複製數據段,堆,棧到子進程
示意圖以下:函數
2.Linux的fork()函數-寫時複製(copy-on-write)
建立一個子進程,內核只爲子進程建立虛擬空間,不分配物理內存,和父進程共享物理空間,
當父進程中有更改相應段的行爲發生時,才爲子進程分配物理空間。
示意圖以下:blog
3.vfork()函數
建立一個子進程,共享父進程的一切。
示意圖以下:進程
4.傳統fork與copy-on-write區別內存
傳統的fork函數直接把全部資源複製給新的進程,效率很低下。
寫時拷貝在須要寫入時,數據纔會被複制,沒有數據寫入時,fork()的開銷實際只是複製父進程的頁表以及給子進程建立惟一的進程描述符。有數據要寫入前,會將將要改變的數據頁複製給子進程。資源