fork與vfork的區別

2021-09-06 04:31:26 字數 522 閱讀 5929

1.vfork保證子程序先執行,在它呼叫exec或exit之後父程序才可能被排程執行。如果在呼叫這兩個函式之前子程序依賴於父程序的進一步動作,則會導致死鎖。

2.fork要拷貝父程序的程序環境;而vfork則不需要完全拷貝父程序的程序環境,在子程序沒有呼叫exec和exit之前,子程序與父程序共享程序環境,相當於執行緒的概念,此時父程序阻塞等待。

為什麼會有vfork呢?

1.執行從父程序那裡拷貝過來的**段

2.呼叫乙個exec執行乙個新的**段

當程序呼叫exec函式時,乙個新程式替換了當前程序的正文,資料,堆和棧段。這樣,前面的拷貝工作就是白費力氣了,這種情況下,聰明的人就想出了vfork。vfork並不複製父程序的程序環境,子程序在父程序的位址空間中執行,所以子程序不能進行寫操作,並且在兒子「霸佔」著老子的房子時候,要委屈老子一下了,讓他在外面歇著(阻塞),一旦兒子執行了exec或者exit後,相當於兒子買了自己的房子了,這時候就相當於分家了。

因此,如果建立子程序是為了呼叫exec執行乙個新的程式的時候,就應該使用vfork

fork與vfork的區別

1.fork函式介紹 include sys types.h include unistd.h pid t fork void 正確返回 父程序中返回子程序的程序號 子程序中返回0 單調用雙返回函式 錯誤返回 1 子程序是父程序的乙個拷貝。具體說,子程序從父程序那得到了資料段和堆疊段,但不是與父程序...

fork與vfork的區別

1.vfork保證子程序先執行,在它呼叫exec或exit之後父程序才可能被排程執行。如果在呼叫這兩個函式之前子程序依賴於父程序的進一步動作,則會導致死鎖。2.fork要拷貝父程序的程序環境 而vfork則不需要完全拷貝父程序的程序環境,在子程序沒有呼叫exec和exit之前,子程序與父程序共享程序...

fork與vfork的區別

fork與vfork的區別 1.fork函式介紹 include sys types.h include unistd.h pid t fork void 正確返回 父程序中返回子程序的程序號 子程序中返回0 單調用雙返回函式 錯誤返回 1 子程序是父程序的乙個拷貝。具體說,子程序從父程序那得到了資...