linux-创建子进程的过程与原理(fork讲解)

文章详细解释了fork函数在创建进程时如何调用clone函数,并说明了子进程是如何继承父进程的PCB、代码段和数据段的。在内存中,代码段是共享的,而数据段在写入时采用写时拷贝策略,确保父子进程在需要时拥有独立的数据副本。通过fork函数,父进程和子进程可以在执行路径上产生分歧,从而执行不同的操作。

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

fork的底层是调用clone函数创建,clone函数的功能是创建一个pcb,fork创建进程以及后边的创建线程本质内部调用的clone函数实现

        我们知道,子进程可以被命令行创建,被fork函数创建,但是子进程创建了什么呢,是完全拷贝父进程函数?还是继承父进程数据呢?

首先我们要知道,进程的构成:进程=内核数据结构+可运行程序载入的代码和执行过程产生数据与部分属性数据。

        子进程也是进程,其实在cpu的角度来看,就是在数据结构上多了一个task_struct结点,那么PCB一定是多了一个。那么在结点的的角度来说,就是讲以父进程的PCB进程属性数据为模板拷贝了一份作为子进程的PCB。

那么问题来了,既然PBC是父进程拷贝来的,那么代码和数据是不是也要拷贝呢?

这里代码确实是父子进程共享的,为什么呢?两个原因,首先在进程载入内存中的代码区,这个区域与常量区,在内存期间代码是不可被修改的,如果每创建一个子进程占用内存代码区一部分资源,这是非常浪费内存资源的,所以操作系统在创建子进程时候,使得子进程与其父进程共享一份代码。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云的小站

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值