Linux多任務編程(二)—fork()函數及其基礎實驗

來源:互聯網
上載者:User

fork()函數  

   在 Linux 中建立一個新進程的唯一方法是使用fork()函數。fork()函數是 Linux 系統中一個非常重要的函數,和咱們以前遇到過的函數由一些區別,因為它看起來執行一次卻返回兩個值,這又作何解釋?不著急,慢慢看。

函數說明

   fork()函數用於從已存在的一個進程中建立一個新的進程,新進程稱為子進程,而原進程稱為父進程。使用fork()函數得到的子進程是父進程的一個複製品,它從父進程處繼承了整個進程的地址空間,包括進程上下文、程式碼片段、進程堆棧、記憶體資訊、開啟的檔案描述符、訊號控制設定、進程優先順序、進程組號、當前工作目錄、根目錄、資源限制和控制終端等,而子進程所專屬的只有它的進程號、資源使用和計時器等。

  因為子進程幾乎是父進程的完全複製,所以父子進程會運行同一個程式。這就需要用一種方式來區分它們,並使它們照此運行,否則,這兩個進程不可能做不同的事。

  實際上是在父進程中執行fork()函數時,父進程會複製出一個子進程,而且父子進程的代碼從fork()函數的返回開始分別在兩個地址空間中同時運行,從而使兩個進程分別獲得其所屬fork()函數的傳回值,其中在父進程中的傳回值是子進程的進程號,而在子進程中返回0。因此,可以通過傳回值來判定該進程是父進程還是子進程。

  同時可以看出,使用fork()函數的代價是很大的,它複製了父進程中的程式碼片段、資料區段和堆棧段裡的大部分內容,使得 fork()函數的系統開銷比較大,而且執行速度頁不是很快。

函數文法

   下表列出了 fork() 函數的文法要點

      

基礎實驗

    如下為fork()函數的基礎實驗程式

    程式碼我上傳到資源,可以自己下載,點此下載

   

 

  將它編寫成C檔案,然後輸入命令:gcc fork.c -o fork

  接著執行命令:./fork,就可以看到如的成功執行結果

  

當然,你也可以使用命令:arm-linux-gcc fork.c -o fork 交叉編譯後下載到板子上運行也可。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.