天天看點

fork函數執行過程分析

  • fork函數的作用

       複制目前程序

  • fork函數會産生和目前程序完全一樣的新程序,并和目前程序一樣從fork函數傳回
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    pid_t pid;

    pid = fork();
    if (pid < 0)
    {
        printf("fork failed!\n");
        exit(-1);
    }
    else if (pid == 0)
    {
        printf("I am child, pid = [%d], parent pid=[%d]\n", getpid(), getppid());
        exit(0);
    }
    else
        printf("I am parent, pid = [%d]\n", getpid());

    wait(NULL);
    exit(0);
}
           
  • fork産生新程序的速度非常快,因為fork并不複制原程序的記憶體空間,而是和原程序共享一個寫時複制的記憶體空間。所謂寫時複制,指的是兩個程序可以同時自由的讀取記憶體,但任意程序試圖對記憶體進行修改時,記憶體就會複制一份提供給修改方單獨使用,以免影響到其他程序的使用。

繼續閱讀