簡介
調用fork()函數會生成一份目前程序的副本。調用fork()的程序為父程序,副本程序為子程序。子程序共享父程序的代碼段,并擁有與父程序資料段,堆和棧的副本(與父程序内容相同但空間獨立)。
現在系統中應用了寫複制機制(Copy-On-Write),調用fork後子程序并沒有生成獨立的空間,仍然共享父程序資源,隻有當子程序嘗試修改資料段或堆棧時才會配置設定新的空間。這樣大大提高了fork的效率。
函數原型
#include <unistd.h>
pid_t fork(void);
描述
建立一個子程序,這個子程序為目前程序的副本。
傳回值
成功時在父程序中傳回子程序的pid,子程序中傳回0。
失敗時在父程序中傳回-1,無子程序。
執行個體
#include <stdio.h>
#include <unistd.h>
int main(void)
{
pid_t pid;
int var = ;
pid = fork();
if(pid == ) {
var++;
printf("I'm child process, pid:[%d], var:%d\n", getpid(), var);
} else if(pid > ) {
sleep(); /* 保證父程序在子程序後退出,便于觀察var變量的獨立性. */
printf("I'm parent process, pid:[%d], var:%d\n", getpid(), var);
} else {
printf("fork error\n");
}
return ;
}
運作結果:
$ ./a.out
I'm child process, pid:[], var:
I'm parent process, pid:[], var: