fork:拷貝了乙份父程序的資料,也就是說父子之間互不干涉
vfork:與父程序共享同乙份資料
程式參考:
#include #include #include int main(void) else if (pid == 0)
printf("pid=%d,var=%d\n", getpid(), var);
return 0;
}
執行結果:
pid=4684,var=89
pid=4683,var=88
因為此處用的是fork,所以父子之間互不干涉。
子程序中的var加一後,變為89。
而父程序中的var依然為88。
如果改為vfork,結果為:
pid=4785,var=89
pid=4784,var=89
因為共享資料了。
如果直接貼上上述**,只將fork改為vfork,會出現段錯誤。
原因是,在fork中用return語句是允許的。
因為子程序是複製了乙份資料。
然而,在vfork中用return語句,因為父子共享,則會導致棧的崩潰。
也就是父程序不能夠繼續執行下去了。
因此,在vfork中需要用exit()函式。
vfork和fork的區別
兩者都是建立乙個子程序 但是 1.但是 vfork 並不將父程序的位址空間完全複製到子程序中,因為子程序會立即呼叫 exec 或exit 於 是也就不會存訪該位址空間。不過在子程序呼叫 e x e c或e x i t之前,它在父程序的空間中執行。這種工作方式在某些 u n i x的頁式虛存實現中提高...
fork 和vfork 的區別
一 fork 1.呼叫方法 include include pid t fork void 正確返回 在父程序中返回子程序的程序號,在子程序中返回0 錯誤返回 1 子程序是父程序的乙個拷貝。即,子程序從父程序得到了資料段和堆疊段的拷貝,這些需要分配新的記憶體 而對於唯讀的 段,通常使用共享記憶體的方...
fork與vfork的區別
1.fork函式介紹 include sys types.h include unistd.h pid t fork void 正確返回 父程序中返回子程序的程序號 子程序中返回0 單調用雙返回函式 錯誤返回 1 子程序是父程序的乙個拷貝。具體說,子程序從父程序那得到了資料段和堆疊段,但不是與父程序...