1.原先linux的设计是全拷贝
全拷贝就是说:数据段(已经初始化的data段的数据)、堆、栈、打开的文件、IO流等等的拷贝
2.新的linux的设计是写时拷贝
写时拷贝(copy on write):如果代码中一个变量的值不发生改变的话就父子进程共享这个变量,只有在父或子进程对这个变量进行改变时才会在父、子进程的地址空间里面去拷贝一份变量
3.demo
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main(int argc,char *argv[])
{
int a = 10;
pid_t repid;
// pid_t fork(void);
repid = fork();
if(repid > 0){
printf("father repid:%d\n a = %d\n",repid,a);
}else if(repid == 0){
a = a + 100;
printf("child repid:%d\n a = %d\n",repid,a);
}
return 0;
}
运行结果:

本文介绍了Linux进程创建的两种方式:原先的全拷贝机制,包括数据段、堆、栈和文件描述符等全部复制;以及现代Linux采用的写时拷贝技术,允许父子进程共享资源,仅在修改时才真正复制。通过示例演示了写时拷贝的效果。
2033

被折叠的 条评论
为什么被折叠?



