• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Prayer

            在一般中尋求卓越
            posts - 1256, comments - 190, trackbacks - 0, articles - 0
              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            fork () 的作用是什么?換句話說(shuō),你用 fork () 的目的是什么?
            ――是為了產(chǎn)生一個(gè)新的進(jìn)程,地球人都知道

            產(chǎn)生一個(gè)什么樣的進(jìn)程?
            ――和你本來(lái)調(diào)用 fork () 的那個(gè)進(jìn)程基本一樣的進(jìn)程,其實(shí)就是你原來(lái)進(jìn)程的副本
            真的完全一樣嗎?
            ――當(dāng)然不能完全一樣,你要兩個(gè)除了 pid 之外其它一模一樣的進(jìn)程干什么,就算 cpu mem
            再多也不用這么擺譜吧?

            哪里不一樣?
            ――當(dāng)然最重要的是 fork () 之后執(zhí)行的代碼不一樣,you know, i know

            怎么實(shí)現(xiàn)呢?
            ――如果是 Windows,它會(huì)讓你在 fork () 里面提供一大堆東西,指明這個(gè)那個(gè)什么的……

            我用的是 unix 啊
            ――所以很簡(jiǎn)單,unix 會(huì)讓兩個(gè)進(jìn)程(不錯(cuò),原來(lái)是一個(gè),unix 替你復(fù)制了一個(gè),現(xiàn)在有兩個(gè)):
            在 fork () 之后產(chǎn)生不同:返回值不同。其中一個(gè)進(jìn)程(使用新的 pid)里面的 fork () 返回零, 
            這個(gè)進(jìn)程就是“子進(jìn)程”;而另一個(gè)進(jìn)程(使用原來(lái)的 pid)中的 fork () 返回前面那個(gè)子進(jìn)程的
            pid,他自己被稱為“父進(jìn)程”

            然后呢?
            ――寫(xiě)代碼的人又不笨,當(dāng)然就根據(jù)返回值是否非零來(lái)判斷了,現(xiàn)在我是在子進(jìn)程里面呢,還是在
            父進(jìn)程里面?在子進(jìn)程里面就執(zhí)行子進(jìn)程該執(zhí)行的代碼,在父進(jìn)程里面就執(zhí)行父進(jìn)程的代碼……
            有鐵桿 windows fans 借此說(shuō)明,windows 好啊,子進(jìn)程用子進(jìn)程的代碼,父進(jìn)程用父進(jìn)程的,
            你 unix 笨了吧,子進(jìn)程包含父進(jìn)程、子進(jìn)程的代碼,父進(jìn)程包含父進(jìn)程子進(jìn)程的代碼,豈不是多"
            占用內(nèi)存了嗎?
            共享同一代碼段,增加的只是全局共享數(shù)據(jù)和對(duì)文件描述符的引用等,另外就是堆棧。你一個(gè)代碼:
            長(zhǎng)達(dá) 10M 的進(jìn)程,fork () 出三四個(gè)子進(jìn)程,只是增加一點(diǎn)內(nèi)存占用(如果你沒(méi)有使用很多全局變量
            的話),而不是占用 40M 以上的內(nèi)存。  




            父進(jìn)程里面有個(gè)變量 var,子進(jìn)程里面也有個(gè)變量 var      

             linux 是多用戶和多進(jìn)程的操作系統(tǒng),進(jìn)程在操作系統(tǒng)中的創(chuàng)建,都會(huì)生成一個(gè)進(jìn)程描述塊,描述當(dāng)前進(jìn)程的所有信息,包括,數(shù)據(jù)段、代碼段、堆棧段的地址,當(dāng)前進(jìn)程的環(huán)境變量,文件描述符等。

                fork函數(shù)過(guò)程:操作系統(tǒng)先創(chuàng)建一個(gè)進(jìn)程描述塊,然后把父進(jìn)程的所有進(jìn)程描述符的信息精確拷貝過(guò)來(lái),和父進(jìn)程一樣(除了進(jìn)程ID不一樣外),代碼段共享,數(shù)據(jù)段和堆棧段復(fù)制,所有的寄存器的值全部精確拷貝,文件描述符也許精確拷貝。

                fork的返回值,fork在父進(jìn)程空間中返回子進(jìn)程的PID,在子進(jìn)程空間中返回0

            Feedback

            # re: 如何理解fork()調(diào)用一次返回兩次的  回復(fù)  更多評(píng)論   

            2011-02-07 23:14 by netsnow
            寫(xiě)代碼的人又不笨,當(dāng)然就根據(jù)返回值是否非零來(lái)判斷了,現(xiàn)在我是在子進(jìn)程里面呢,還是在
            父進(jìn)程里面
            亮點(diǎn)
            久久不射电影网| 久久久国产打桩机| 人妻少妇久久中文字幕| 少妇被又大又粗又爽毛片久久黑人 | 久久久久久久久久久久中文字幕 | 情人伊人久久综合亚洲| 国产午夜精品久久久久免费视| 亚洲AV日韩AV天堂久久| 国产偷久久久精品专区| 亚洲AV无码久久精品色欲| 欧美精品久久久久久久自慰| 亚洲AV日韩AV永久无码久久| 久久天天躁狠狠躁夜夜网站| avtt天堂网久久精品| 久久99精品综合国产首页| 久久中文娱乐网| 久久涩综合| 日韩精品久久无码中文字幕| 久久精品国产免费| 久久国产成人午夜aⅴ影院 | 欧美伊香蕉久久综合类网站| 国产成人精品久久亚洲| 亚洲国产精品嫩草影院久久| 亚洲欧洲日产国码无码久久99| 国产成人精品免费久久久久| 国产精品美女久久久久av爽| 亚洲欧美另类日本久久国产真实乱对白 | 青青久久精品国产免费看| 亚洲国产精品无码久久九九| 亚洲AV成人无码久久精品老人 | 久久久久久久免费视频| 精品久久久久久无码专区| 91超碰碰碰碰久久久久久综合| 亚洲午夜无码AV毛片久久| 人妻无码αv中文字幕久久琪琪布 人妻无码久久一区二区三区免费 人妻无码中文久久久久专区 | 精品一二三区久久aaa片| 久久水蜜桃亚洲av无码精品麻豆 | 久久久久九国产精品| 久久亚洲春色中文字幕久久久 | 亚洲色欲久久久综合网东京热| 99久久超碰中文字幕伊人|