vfork函數

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

/* 
    vfork和fork的區別:
        1.vfork創建的子進程和父進程共享線性地址空間;fork創建的子進程具有獨立的線性地址空間
        2.vfork先執行子進程;fork子進程和父進程的執行順序是隨機的
        3.vfork創建的子進程中只有在調用exit()或者execve()函數之後,父進程纔可能被成功調用
*/

int main(void)
{
    pid_t fpid;

    int count = 0;

    fpid = vfork();

    if (fpid == -1) {
        perror("MSG");
    }

    else if (fpid > 0) {
        printf("parrent: %d\n", getpid());
        count++;
        printf("count: %d\n", count)
    }

    else if (fpid == 0) {
        printf("child: %d\n", getpid());
        count++;
        printf("count: %d\n", count);
        exit(0);
    }

    return 0;
}

/*
    1.執行結果:
    child: 13729
    count: 1
    parrent: 13728
    count: 2

    2.如果子進程沒有調用exit(), 執行結果爲:
    child: 13729
    count: 1
    parrent: 13728
    count: 1
    重複上面的打印結果
*/
發佈了39 篇原創文章 · 獲贊 22 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章