fork()函數和vfork()函數的區別

創建進程時主要用到一下兩個函數
1:fork()函數
a:如果執行成功,在父進程中將返回子進程(新創建的進程)的PID,類型爲pid_t,子進程將返回0,區別父進程;
b:執行失敗返回-1;
子進程執行的位置爲fork()返回的位置,父子進程對於局部變量(棧空間)執行復制操作,對於文件描述符的文件表信息(文件的讀寫位置)共享使用。
2:vfork()函數
vfolk()函數創建新進程的時候不復制進程地址空間,而是在必要的時候才申請存儲空間。如果子進程只執行exec()函數,則使用fork函數從父進程到子進程的數據空間將不被使用。
exec函數
exec函數族提供了一個在進程中啓動另一個程序執行的方法。它可以根據指定的文件名或目錄名找到可執行文件,並用它來取代原調用進程的數據段、代碼段和堆棧段,在執行完之後,原調用進程的內容除了進程號外,其他全部被新的進程替換了

相比fork函數,vfork()函數可以很大程度上提升性能,vfork只在需要時複製,而一般採用與父進程共享所有資源的方式進行處理。

簡單記憶:
fork()函數是複製一個父進程的副本,從而擁有自己獨立的代碼段,數據段,以及堆棧空間,即成爲一個獨立的實體。
vfork函數是共享父進程以及數據段。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章