對 fork 函數(shù)的思考和理解

fork函數(shù)通過系統(tǒng)調(diào)用創(chuàng)建一個與原來進(jìn)程幾乎完全相同的進(jìn)程计济。一個進(jìn)程調(diào)用fork()函數(shù)后灸撰,系統(tǒng)先給新的進(jìn)程分配資源,例如存儲數(shù)據(jù)和代碼的空間烧栋。然后把原來的進(jìn)程的所有值都復(fù)制到新的新進(jìn)程中斟珊。相當(dāng)于克隆了一個自己苇倡。

也就是說,原來的進(jìn)程和fork出來的子進(jìn)程的進(jìn)程空間是完全一樣的囤踩,包括 代碼段旨椒,數(shù)據(jù)段,bss段堵漱,堆區(qū)综慎,共享內(nèi)存,棧區(qū)勤庐。如下圖所示:



下面是幾個關(guān)于子進(jìn)程復(fù)制父進(jìn)程的內(nèi)存空間的一些細(xì)節(jié):

  • 寫時拷貝
    再進(jìn)行內(nèi)存空間的復(fù)制的時候示惊,這里使用了copy-and-write(寫時拷貝)的方式。簡單的說愉镰,就是資源的復(fù)制是在需要寫入的時候才會進(jìn)行米罚,在此之前,只有以只讀方式共享丈探。(寫時拷貝是一種可以推遲甚至避免拷貝數(shù)據(jù)的技術(shù)阔拳。內(nèi)核此時并不復(fù)制整個進(jìn)程的地址空間,而是讓父子進(jìn)程共享同一個地址空間。只用在需要寫入的時候才會復(fù)制地址空間糊肠,從而使各個進(jìn)行擁有各自的地址空間。)

  • fork 之后 關(guān)于文件的問題
    在Linux系統(tǒng)中遗锣,常常存在許多對文件的操作货裹,fork()的執(zhí)行將會對文件操作帶來一些小麻煩。由于子進(jìn)程會將父進(jìn)程的大多數(shù)數(shù)據(jù)拷貝一份精偿,這樣在文件操作中就意味著子進(jìn)程會獲得父進(jìn)程所有文件描述符的副本弧圆。(也就是文件句柄包含著當(dāng)前文件的偏移量以及文件狀態(tài)標(biāo)志 都是完全相同的)


  • vfork 和 fork的區(qū)別
    vfork與fork相似,但是也有區(qū)別,具體區(qū)別歸結(jié)為以下3點(diǎn):

    1. fork() 子進(jìn)程拷貝父進(jìn)程的數(shù)據(jù)段笔咽,代碼段. vfork() 完全和父進(jìn)程共享內(nèi)存搔预,包括堆、BSS叶组、初始化非0數(shù)據(jù)區(qū)等區(qū)域拯田。

    2. fork() 父子進(jìn)程的執(zhí)行次序不確定. vfork():保證子進(jìn)程先運(yùn)行。

    為什么要使用 vfork甩十?
    因為以前的fork當(dāng)它創(chuàng)建一個子進(jìn)程時船庇,將會創(chuàng)建一個新的地址空間,并且拷貝父進(jìn)程的資源侣监,而往往在子進(jìn)程中會執(zhí)行exec調(diào)用鸭轮,這樣,前面的拷貝工作就是白費(fèi)力氣了橄霉,這種情況下窃爷,聰明的人就想出了vfork


  • 什么是僵尸進(jìn)程按厘?
    進(jìn)程退出后,系統(tǒng)會把該進(jìn)程的狀態(tài)變成Zombie覆糟,然后給上一定的時間等著父進(jìn)程來收集其退出信息刻剥,因為可能父進(jìn)程正忙于別的事情來不及收集,所以滩字,使用Zombie狀態(tài)表示進(jìn)程退出了造虏,正在等待父進(jìn)程收集信息中。

    # 查看僵尸進(jìn)程
    ps -aux | grep ‘Z’
    
  • 如何防止僵尸進(jìn)程的出現(xiàn)麦箍?
    子進(jìn)程結(jié)束的時候漓藕,會產(chǎn)生一個sigchld信號⌒眩可以在父進(jìn)程里面加入對這個信號的處理函數(shù)享钞。在處理信號的函數(shù)里面調(diào)用wait 或 wait_pid 函數(shù),回收子進(jìn)程诀蓉。

    這里有一個問題栗竖,就是如果有100個子進(jìn)程需要收回暑脆,每一個子進(jìn)程結(jié)束的時候,都會發(fā)送sigchild信號狐肢。很有可能是同時發(fā)送信號添吗。但是信號機(jī)制,是不支持排隊的份名。所以碟联,在信號處理的函數(shù)里面要調(diào)用wait_pid + WNOHANG參數(shù)。

    WNOHANG參數(shù)
    表示即使沒有子進(jìn)程退出僵腺,它也會立即返回鲤孵,不會像wait那樣永遠(yuǎn)等下去。
    這樣wait_pid就不會阻塞
    

    如果感興趣的話辰如,可以看這個 :
    https://www.cnblogs.com/wuchanming/p/4020463.html

  • 關(guān)于進(jìn)程打開文件 以及 文件系統(tǒng)的補(bǔ)充

    一個進(jìn)程去打開一個文件之后普监,會返回一個文件描述符。這個描述符對應(yīng)了一個文件打開表丧没。文件打開表對應(yīng)著inode的結(jié)點(diǎn)鹰椒。inode對應(yīng)block。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末呕童,一起剝皮案震驚了整個濱河市漆际,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌夺饲,老刑警劉巖奸汇,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異往声,居然都是意外死亡擂找,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門浩销,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贯涎,“玉大人,你說我怎么就攤上這事慢洋√瘤ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵普筹,是天一觀的道長败明。 經(jīng)常有香客問我,道長太防,這世上最難降的妖魔是什么妻顶? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上讳嘱,老公的妹妹穿的比我還像新娘幔嗦。我一直安慰自己,他們只是感情好沥潭,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布崭添。 她就那樣靜靜地躺著,像睡著了一般叛氨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上棘伴,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天寞埠,我揣著相機(jī)與錄音,去河邊找鬼焊夸。 笑死仁连,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的阱穗。 我是一名探鬼主播饭冬,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼揪阶!你這毒婦竟也來了昌抠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤鲁僚,失蹤者是張志新(化名)和其女友劉穎炊苫,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體冰沙,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡侨艾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了拓挥。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唠梨。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖侥啤,靈堂內(nèi)的尸體忽然破棺而出当叭,到底是詐尸還是另有隱情,我是刑警寧澤愿棋,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布科展,位于F島的核電站,受9級特大地震影響糠雨,放射性物質(zhì)發(fā)生泄漏才睹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望琅攘。 院中可真熱鬧垮庐,春花似錦、人聲如沸坞琴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽剧辐。三九已至寒亥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間荧关,已是汗流浹背溉奕。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留忍啤,地道東北人加勤。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像同波,于是被迫代替她去往敵國和親鳄梅。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容