- fork()函數調用之後子進程從fork()語句之後開始執行,其原因是子進程複製了程序計數器
- 在剛剛fork之後父子進程之間的數據段(全局變量),棧段(局部變量),堆段(動態內存),代碼段,程序計數器等都是相同的(在當前的linux版本中遵從的是讀時共享寫時複製的原則)
- 父子之間不同的是進程ID,fork函數的返回值
- 共享的是文件描述符以及mmap建立的映射區
全局變量是寫時複製的例子
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <cstring>
#include <fcntl.h>
#include <sys/stat.h>
/*fork共享*/
int var = 0;
int main()
{
pid_t pid;
pid=fork();
if (pid > 0)//父進程
{
sleep(2);
printf("var:%d\n", var);
}
else if(pid==0)
{
var = 1;
printf("var:%d\n", var);
}
}
/*fork共享*/