关于fork()函数需要注意的地方

本文详细介绍了Linux系统中的fork()函数,包括如何通过fork()创建子进程,以及父子进程间的内存关系。在调用fork()后,两个进程拥有相同的内存内容,但采用写时拷贝策略。通过示例代码展示了fork()返回值在父进程和子进程中的不同,并总结了fork()在服务器编程中的应用,强调了子进程与父进程的独立性。
摘要由CSDN通过智能技术生成

1.关于fork()的描述

 fork通过复制调用进程创建一个新进程,则这个新进程就叫做子进程,被调用的进程叫做父进程。子进程与父进程在不同的内存空间中运行。在调用fork()函数时,两个内存空间具有相同内容。其中一个进程执行的内存写、文件映射对另一个进程没有影响。

2.关于fork()返回值

 当成功调用fork()时,在父进程中返回子进程的PID,且返回值为0.调用失败时,返回值为-1。如果没有创建新进程时,系统会返回一个非负整数。

3.代码编程实例

 编译运行结果如下:

 由运行结果可以看出,调用fork()函数后,在fork()之后的代码执行第一次时,fork()返回值即retpid=7080把值赋给父进程。执行第二次时,父进程创建子进程,retpid=0把值赋给子进程,而此时子进程的pid刚好等于fork()赋给父进程的返回值即retpid=7080。

4.对fork()的总结

 通过简单的代码模拟服务器接收客户端发送的链接请求,从而创建新的进程。其运行结果如下:

 子进程与父进程是互不影响的,同时在调用fork()后,linux存在两种拷贝。第一种是全拷贝,包括堆、栈、文件、I/O流,数据等等;第二种则是写时拷贝(Copy On Write)即COW,例如当子进程没有对程序中的初始化数据进行修改时,代码中所有的数据均是父、子进程所共有的;反之,子进程则会去拷贝父进程的中那个修改的数据。

创建子进程的目的:

这是个人对fork()学习的理解,也是提醒自己在学习这部分内容需要注意的地方,希望对你有帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值