Linux下,2_進程簡單創建vfork

上文,簡單得介紹了fork。這裏,我們來說一下vfork

fork和vfork的區別

1.  內存空間
fork ():  子進程拷貝父進程的數據段,代碼段
vfork(): 子進程與父進程共享數據段

2.  執行次序
fork ():  父/子進程的執行次序不確定
vfork(): 子進程先運行,在調用exec 或exit 之前與父進程數據是共享的, 子進程調用exec
         或exit 之後,父進程纔可能被調度運行。如果在調用這兩個函數之前子進程依賴於父進程的進一步動作,則會導致死鎖。

#include <stdlib.h>
#include <sys/types.h>
#include <sys/time.h>

int main()
{
    int a = 1;
    pid_t pid;

    pid = vfork();
    if (pid == 0) {
        /* child task */
        a++;
        printf("Hello, child: a=%d\n", a);

        sleep(5);
        exit(0);
    } else {
        /* parent task */
        sleep(3);
        printf("Hello, parent: a=%d\n", a);
    }

    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章