- 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并不複制原程序的記憶體空間,而是和原程序共享一個寫時複制的記憶體空間。所謂寫時複制,指的是兩個程序可以同時自由的讀取記憶體,但任意程序試圖對記憶體進行修改時,記憶體就會複制一份提供給修改方單獨使用,以免影響到其他程序的使用。