fork和vfork的區別

2021-07-02 13:04:43 字數 690 閱讀 2074

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 子程序是父程序的乙個拷貝。具體說,子程序從父程序那得到了資料段和堆疊段,但不是與父程序...