<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    linux fork函數與vfork函數

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    一、fork
    1. 調用方法
    #include <sys/types.h>
    #include <unistd.h>

    pid_t fork(void);
    正確返回:在父進程中返回子進程的進程號,在子進程中返回0
    錯誤返回:-1

         子進程是父進程的一個拷貝。即,子進程從父進程得到了數據段和堆棧段的拷貝,這些需要分配新的內存;而對于只讀的代碼段,通常使用共享內存的方式訪問。fork返回后,子進程和父進程都從調用fork函數返回處開始執行。
         父進程與子進程的不同之處在于:fork的返回值不同——父進程中的返回值為子進程的進程號,而子進程為0
    2. fork函數調用的用途
    ⑴ 一個進程希望復制自身,從而父子進程能同時執行不同段的代碼。
    ⑵ 進程想執行另外一個程序

     

    二、vfork
    1. 調用方法
    與fork函數完全相同
    #include <sys/types.h>
    #include <unistd.h>

    pid_t fork(void);
    正確返回:在父進程中返回子進程的進程號,在子進程中返回0
    錯誤返回:-1

    2. vfork函數調用的用途
           用vfork創建的進程主要目的是用exec函數執行另外的程序,與fork的第二個用途相同

    三、fork與vfork的區別
    1. fork要拷貝父進程的數據段;而vfork則不需要完全拷貝父進程的數據段,在子進程沒有調用exec和exit之前,子進程與父進程共享數據段
    2. fork不對父子進程的執行次序進行任何限制;而在vfork調用中,子進程先運行,父進程掛起,直到子進程調用了exec或exit之后,父子進程的執行次序才不再有限制

    四、結束子進程
         結束子進程不用exit(0),而使用_exit(0)。這是因為_exit(0)在結束進程時,不對標準I/O流進行任何操作。而exit(0)則會關閉進程的所有標準I/O流。

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全