深入理解fork()

简介:

 

                                            

最近经常在论坛上见到有初学者问关于fork()的很多疑惑。在这里把我关于fork()的体会和理解写出来供大家分享。对于fork()疑惑,无非是对于为什么fork()函数会执行一次,但是返回两次,在父进程中,返回子进程ID,在子进程中返回0.

 

 

这里就fork()的工作原理及过程进行分析。为了了解fork(),首先大家要有一个分岔的概念,也就是我上图中,fork()之后,会从fork()之后分岔出一个子进程B。fork()创建出一个子进程B,同时将父进程A的资源复制给进程B。子进程实质就是对父进程的复制。子进程出了和父进程共享字符text  段意外,其余的都是有自己独立的stack,heap。那么为什么fork()会返回2次呢?我们可以这么理解:在子进程中也有一个fork()在执行,那么他就会返回一个值。对于一个子进程来说,他可以有多个父进程,那么返回不同的数没有任何意思,所以返回0是最合适的,在父进程中,一个父进程可以有多个子进程,那么为了区分进程以及得到子进程号,所以在父进程中需要子进程返回一个子进程号。父进程永远没有办法主动获取子进程号的功能,也没有这种函数,处在在创建进程能返回子进程号之外。

 

     对于复制父进程来创建子进程,这种复制遵循各COW(copy-on-write)即为写时复制。内核并不是完全的复制所有的父进程资源给子进程。创建子进程之后,父进程会将父进程的资源标志为只读,当子进程需要改变资源的时候,就会发生复制,即复制该资源给子进程,让子进程单独自己去处理。

 

 


版权申明:
转载文章请注明原文出处http://blog.csdn.net/feiyinzilgd/archive/2010/07/20/5750853.aspx

并请联系谭海燕本人或者前往谭海燕个人主页留言

目录
相关文章
|
移动开发 小程序 JavaScript
uView ReadMore 展开阅读更多
uView ReadMore 展开阅读更多
201 0
|
监控 前端开发
STM32F103标准外设库——RCC时钟(六)
STM32F103标准外设库——RCC时钟(六)
1349 0
STM32F103标准外设库——RCC时钟(六)
|
5月前
|
数据采集 分布式计算 安全
云产品评测|智能数据建设与治理 Dataphin
Dataphin是阿里巴巴OneData方法论的云化输出,提供数据采集、建模、管理到应用的全生命周期大数据能力,助力企业构建高质量、安全经济的数据中台。支持多计算平台与开放拓展,适配各行业需求。本文档介绍Dataphin部署流程:准备数据样本,新建数据板块,配置参数,新增MaxCompute计算源,获取并校验AccessKey ID。具体操作详见阿里云官方文档,确保每步准确执行以完成数据治理与建设。
291 9
|
10月前
|
消息中间件 存储 Linux
|
10月前
|
消息中间件 负载均衡 Kafka
【赵渝强老师】Kafka的主题与分区
Kafka 中的消息按主题分类,生产者发送消息到特定主题,消费者订阅主题消费。主题可分多个分区,每个分区仅属一个主题。消息追加到分区时,Broker 分配唯一偏移量地址,确保消息在分区内的顺序性。Kafka 保证分区有序而非主题有序。示例中,Topic A 有 3 个分区,分区可分布于不同 Broker 上,支持负载均衡和容错。视频讲解及图示详见原文。
236 2
ly~
|
11月前
|
存储 安全 大数据
数据库的发展趋势是什么?
数据库发展趋势涵盖云化、智能化、分布式及多模型融合等多个方面。云数据库和DBaaS模式使企业能快速调整资源,降低成本;AI和机器学习技术推动智能运维、查询优化等功能;分布式架构和并行计算则提升了数据处理能力和速度。此外,多模型数据库满足了多样化的数据处理需求,而数据安全技术和隐私保护也在不断加强。数据库与大数据、AI、区块链等新兴技术的融合将进一步提升其功能与安全性。
ly~
877 1
|
11月前
|
机器学习/深度学习 数据可视化 自动驾驶
YOLO11-seg分割:具有切片操作的SimAM注意力,魔改SimAM助力分割
本文创新地对SimAM注意力机制进行魔改,引入切片操作,显著提升了小目标特征提取能力。针对SimAM在计算整张特征图的像素差平均值时可能忽略小目标重要性的问题,通过切片操作增强了小目标的加权效果。实验结果显示,魔改后的SimAM在YOLO11-seg上的Mask mAP50从0.673提升至0.681,有效改善了小目标检测性能。
979 2
|
域名解析 Kubernetes 负载均衡
在K8S中,外部访问容器服务,比如说提供了一个域名,链路怎么走?数据经过哪些组件?
在K8S中,外部访问容器服务,比如说提供了一个域名,链路怎么走?数据经过哪些组件?
|
存储 编解码 算法
H.264视频编码:Slice的艺术与实践
H.264视频编码:Slice的艺术与实践
434 0
|
网络协议 Linux C++
[笔记] libpcap编译及使用
[笔记] libpcap编译及使用
563 0