解答:fork()函數執行後,子進程先執行的原因。

來源:互聯網
上載者:User

寫過fork()函數的朋友應該有經驗,一般使用fork()函數後,列印執行順序時總是子進程先執行。但是書上卻說fork函數的子進程與父進程之間的執行順序不確定,原因是什嗎?

這就涉及到核心一個技術:copy-on-write,即寫時拷貝。傳統的fork函數調用直接把所有資源複製給新建立的進程,簡單,但是浪費!寫時拷貝技術是建立新進程時延遲或者不拷貝資料的技術。新建立進程後核心並不複製整個進程的地址空間給子進程,而是讓父子進程暫時共用一個地址空間,只有在子進程需要寫入的時候,資料才被複製到子進程地址空間。例如,在fork()後立即調用exec(),此時無需進行整個地址空間的資料拷貝,fork()的開銷僅限於複製父進程的頁表以及給子進程建立唯一的進程描述符。

往往我們新建立的進程總要調用exec(),所以,核心往往先執行新建立的子進程。但是並不是絕對的。

個人理解,拋磚引玉,不合適地方請大家提出。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.