fork()函数

fork() 函数用于从已存在进程中创建一个新进程。新进程称为子进程,而原进程称为父进程。

fork() 函数创建进程成功则多了一个PCB,有新的代码和数据,它们中大多数都来自父进程。也就是说,使用 fork() 函数得到的子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址空间,包括进程上下文、内存信息、打开的文件描述符、信号控制设定、进程优先级、进程组号、当前工作目录、根目录、资源限制、控制终端等。

因此子进程对于父进程
(1)代码共享,因为代码只读。
(2)数据私有,因为进程的独立性。

数据私有:Linux内核采用写时拷贝,并不是每个数据都有多份。
这是因为有个 exec 系列的系统调用,它会勾引子进程另起炉灶。如果创建子进程就要内存拷贝的的话,一执行exec,辛辛苦苦拷贝的内存又被完全放弃了。

因为子进程继承了父进程的PCB,PCB中有PC(程序计数器),所以子进程创建成功后,父子进程都执行。

fork 完成后有两个返回值
(1)0 ,给子进程返回0;
(2)fork 成功后的子进程pid,返回给父进程。给父进程返回pid是由于父子进程是1对多的关系。

测试:
这里写图片描述

这里写图片描述

结果为什么打印了6次?
这种现象类似于细胞分裂

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值