• <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++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            如何理解fork()調用一次返回兩次的

            Posted on 2009-04-15 22:48 Prayer 閱讀(2938) 評論(1)  編輯 收藏 引用 所屬分類: LINUX/UNIX/AIX

            fork () 的作用是什么?換句話說,你用 fork () 的目的是什么?
            ――是為了產生一個新的進程,地球人都知道

            產生一個什么樣的進程?
            ――和你本來調用 fork () 的那個進程基本一樣的進程,其實就是你原來進程的副本
            真的完全一樣嗎?
            ――當然不能完全一樣,你要兩個除了 pid 之外其它一模一樣的進程干什么,就算 cpu mem
            再多也不用這么擺譜吧?

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

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

            我用的是 unix 啊
            ――所以很簡單,unix 會讓兩個進程(不錯,原來是一個,unix 替你復制了一個,現在有兩個):
            在 fork () 之后產生不同:返回值不同。其中一個進程(使用新的 pid)里面的 fork () 返回零, 
            這個進程就是“子進程”;而另一個進程(使用原來的 pid)中的 fork () 返回前面那個子進程的
            pid,他自己被稱為“父進程”

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




            父進程里面有個變量 var,子進程里面也有個變量 var      

             linux 是多用戶和多進程的操作系統,進程在操作系統中的創建,都會生成一個進程描述塊,描述當前進程的所有信息,包括,數據段、代碼段、堆棧段的地址,當前進程的環境變量,文件描述符等。

                fork函數過程:操作系統先創建一個進程描述塊,然后把父進程的所有進程描述符的信息精確拷貝過來,和父進程一樣(除了進程ID不一樣外),代碼段共享,數據段和堆棧段復制,所有的寄存器的值全部精確拷貝,文件描述符也許精確拷貝。

                fork的返回值,fork在父進程空間中返回子進程的PID,在子進程空間中返回0

            Feedback

            # re: 如何理解fork()調用一次返回兩次的  回復  更多評論   

            2011-02-07 23:14 by netsnow
            寫代碼的人又不笨,當然就根據返回值是否非零來判斷了,現在我是在子進程里面呢,還是在
            父進程里面
            亮點
            久久久久亚洲精品天堂久久久久久 | 国产一区二区精品久久凹凸 | 精品久久久久久久久免费影院| 免费一级欧美大片久久网| 午夜精品久久久久久影视riav| 少妇人妻88久久中文字幕| 国产精品久久久久影院色| 武侠古典久久婷婷狼人伊人| 蜜臀av性久久久久蜜臀aⅴ麻豆| 久久亚洲精品中文字幕三区| 午夜精品久久久久久| 99精品国产在热久久| 久久人妻少妇嫩草AV无码蜜桃| 中文字幕热久久久久久久| 亚洲国产成人精品女人久久久| 俺来也俺去啦久久综合网| 亚洲七七久久精品中文国产| 国产国产成人精品久久| 一本一本久久a久久综合精品蜜桃 一本一道久久综合狠狠老 | 久久久精品视频免费观看| 91精品国产综合久久婷婷| 久久久久久久精品妇女99| 久久久久亚洲AV无码专区网站| 久久精品中文闷骚内射| 久久综合久久美利坚合众国| 国产免费久久精品99久久| 久久久精品国产sm调教网站 | 一本久道久久综合狠狠爱| 久久婷婷人人澡人人爽人人爱| 久久久久国产一级毛片高清板| 91精品国产91久久久久福利| 亚洲国产精品无码久久一线 | 久久婷婷五月综合97色 | 久久精品国产亚洲一区二区三区| 久久综合丝袜日本网| 久久精品国产91久久综合麻豆自制 | 18岁日韩内射颜射午夜久久成人| 国产精品久久久久久久久软件| 怡红院日本一道日本久久 | 亚洲综合婷婷久久| 久久成人精品视频|