日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

关于fork

發(fā)布時(shí)間:2023/12/19 综合教程 32 生活家
生活随笔 收集整理的這篇文章主要介紹了 关于fork 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

關(guān)于fork


之前和同學(xué)討論了一個(gè)關(guān)于fork的問(wèn)題,之前自己也是稍微看過(guò)一點(diǎn),但是具體的也不是太了解,這樣還是很不好的。
具體的問(wèn)題來(lái)源于一個(gè)面試題,大概是問(wèn) fork||fork操作會(huì)生成幾個(gè)新的進(jìn)程
類(lèi)似的面試題,也有,比如更復(fù)雜一點(diǎn)的情況,參考這個(gè):
http://blog.csdn.net/hs794502825/article/details/10242091

###再簡(jiǎn)單回顧一下fork

fork主要的功能就是說(shuō),把已有的一個(gè)進(jìn)程復(fù)制一個(gè)出來(lái),這兩個(gè)新的進(jìn)程幾乎完全是一樣的。
執(zhí)行fork之后,生成的兩個(gè)進(jìn)程每個(gè)都會(huì)啟動(dòng)一個(gè)從同一位置開(kāi)始執(zhí)行的線程,執(zhí)行到fork函數(shù)中的時(shí)候,子進(jìn)程就會(huì)復(fù)制父進(jìn)程的堆棧段,所以兩個(gè)進(jìn)程實(shí)際上都陷入在fork中,還沒(méi)有執(zhí)行完,這樣的話,fork其實(shí)可能有兩種不同的返回值,一個(gè)是原先的父進(jìn)程的fork執(zhí)行完之后的返回值,另一個(gè)是新生成的子進(jìn)程的fork得到的返回值。
當(dāng)然兩種返回值是不同的:

父進(jìn)程中,fork函數(shù)的返回值是子進(jìn)程的ID
子進(jìn)程中,fork函數(shù)的返回值是0
如果出錯(cuò),則返回最值是-1

可以這樣理解,父進(jìn)程實(shí)質(zhì)上沒(méi)變,多出來(lái)的子進(jìn)程復(fù)制了父進(jìn)程的堆棧,父進(jìn)程要對(duì)其有一個(gè)引用,就像一個(gè)鏈表一樣,因此就返回了子進(jìn)程的id,而子進(jìn)程沒(méi)有新生成的進(jìn)程可以引用,就返回了0。系統(tǒng)就是根據(jù)返回值來(lái)區(qū)別到底是父進(jìn)程還是子進(jìn)程的。

實(shí)際上在調(diào)度的時(shí)候也無(wú)法知道當(dāng)前到底是父進(jìn)程還是子進(jìn)程,這個(gè)需要探討更底層的實(shí)現(xiàn),因此,通常用fork函數(shù)的返回值來(lái)判斷到底當(dāng)前是父進(jìn)程還是子進(jìn)程,之后再執(zhí)行對(duì)應(yīng)的操作。

再回顧下那個(gè)題目


就是先前列出的博客里的

第一次fork 生成了一個(gè)新的進(jìn)程,此時(shí)有兩個(gè)進(jìn)程

第二次 fork && fork || fork 按照博客里的圖,每一個(gè)最上端的父進(jìn)程會(huì)生成了四個(gè)新的進(jìn)程(中間有好幾次是新生成的子進(jìn)程又充當(dāng)了父進(jìn)程),開(kāi)始的時(shí)候有,經(jīng)過(guò)第一次的操作,有兩個(gè)進(jìn)程,它們分別作為最頂端的父進(jìn)程,這樣就生成了4+4=8個(gè)新的進(jìn)程

第三次 又fork 經(jīng)過(guò)了前兩步的操作 已經(jīng)有10個(gè)進(jìn)程了 每個(gè)進(jìn)程執(zhí)行一次fork會(huì)新生成一個(gè)新的進(jìn)程 這樣就又生成了10個(gè)新的進(jìn)程 于是整個(gè)過(guò)程就一共產(chǎn)生了 10+8+1=19 個(gè)新的進(jìn)程

再這個(gè)基礎(chǔ)上,單純的 fork || fork 操作應(yīng)該是新生成了兩個(gè)進(jìn)程

相關(guān)參考資料

(這個(gè)來(lái)龍去脈講的比較透徹)http://www.cnblogs.com/hicjiajia/archive/2011/01/20/1940154.html

總結(jié)

以上是生活随笔為你收集整理的关于fork的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。