进程创建发生了什么事(全拷贝和写时拷贝)

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
}

运行结果:
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值