vfork,fork,exec函式的區別

2021-06-08 21:30:50 字數 1371 閱讀 8326

vfork用於建立乙個新程序,而該新程序的目的是exec乙個新程序,

vfork和fork一樣都建立乙個子程序,但是它並不將父程序的位址空間

完全複製到子程序中,因為子程序會立即呼叫exec,於是也就不會存放該位址空間。

不過在子程序中呼叫exec或exit之前,他在父程序的空間中執行。

vfork和fork之間的另乙個區別是: vfork保證子程序先執行,在他呼叫exec或exit之後

父程序才可能被排程執行。如果在呼叫這兩個函式之前子程序依賴於父程序的進一步動作

,則會導致死鎖。 

用fork函式建立子程序後,子程序往往要呼叫一種exec函式以執行另乙個程式,

當程序呼叫一種exec函式時,該程序完全由新程式代換,而新程式則從其main函式

開始執行,因為呼叫exec並不建立新程序,所以前後的程序id 並未改變,exec只是用

另乙個新程式替換了當前程序的正文,資料,堆和棧段。

如果fork有了寫時拷貝頁表項,那麼vfork就徹底沒用了。

某網友:我覺得搞技術的人應該多問問技術背後的歷史。 為什麼會有vfork,因為以前的fork很傻,當它建立乙個子程序時,將會建立乙個新的位址空間,並且拷貝父程序的資源,而往往在子程序中會執行exec呼叫,這樣,前面的拷貝工作就是白費力氣了,這種情況下,聰明的人就想出了vfork,它產生的子程序剛開始暫時與父程序共享位址空間(其實就是執行緒的概念了),因為這時候子程序在父程序的位址空間中執行,所以子程序不能進行寫操作,並且在兒子「 霸佔」著老子的房子時候,要委屈老子一下了,讓他在外面歇著(阻塞),一旦兒子執行了exec或者exit後,相當於兒子買了自己的房子了,這時候就相當於分家了。 其實,現在的fork已經很聰明了,諸如write on copy以及子程序先執行,vfork原來的優勢已經沒有了,所以希望以後vfork會消失,走向統一!

fork用於建立乙個新程序,而該新程序的目的是exec乙個新程序,

vfork和fork一樣都建立乙個子程序,但是它並不將父程序的位址空間

完全複製到子程序中,因為子程序會立即呼叫exec,於是也就不會存放該位址空間。

。不過在子程序中呼叫exec或exit之前,他在父程序的空間中執行。

vfork和fork之間的另乙個區別是: vfork保證子程序先執行,在她呼叫exec或exit之後

父程序才可能被排程執行。如果在呼叫這兩個函式之前子程序依賴於父程序的進一步動作

,則會導致死鎖。 

用fork函式建立子程序後,子程序往往要呼叫一種exec函式以執行另乙個程式,

當程序呼叫一種exec函式時,該程序完全由新程式代換,而新程式則從其main函式

開始執行,因為呼叫exec並不建立新程序,所以前後的程序id 並未改變,exec只是用

另乙個新程式替換了當前程序的正文,資料,堆和棧段。   

函式基礎 匿名函式,函式,箭頭函式,立即執行函式

doctype html html lang en head meta charset utf 8 meta name viewport content width device width,initial scale 1.0 title document title head body body ...

函式 常見函式

def fib n if n 1 return 1if n 2 return 1return fib n 1 fib n 2 def hannuo n,a,b,c n 表示有n個盤子 a 代表第乙個塔,開始的塔 b 代表第二個塔,過渡塔 c 代表第三個塔,目標塔 d.在 中n 2,這個分支可以不要,...

Lua 函式 函式

在lua中,函式是一種對語句和表示式進行抽象的主要機制。函式既可以完成某項特定的任務,也可以只做一些計算並返回結果。lua具有一項非常於總不同的特徵,允許函式返回多個結果 s,e string.find hello lua users lua print s,e 7 9 以lua編寫的函式同樣可以返...