fork()函数浅析

本文介绍了UNIX或类UNIX系统中的fork()函数,用于创建新的进程。调用fork()会创建一个与父进程几乎相同的子进程,两者并发执行。父进程获取子进程的PID,子进程则返回0。通过写时拷贝技术,可以有效减少内存开销,提高系统效率。
摘要由CSDN通过智能技术生成

fork()是UNIX或类UNIX中的分叉函数,fork函数将运行着的程序分成2个(几乎)完全一样的进程,每个进程都启动一个从代码的同一位置开始执行的线程。这两个进程中的线程继续执行,就像是两个用户同时启动了该应用程序的两个副本。

其函数原型为:

pid_t fork( void);


当调用fork()时,将执行以下动作:

  • 向系统申请一个新PID
  • 创建子进程,复制父进程的PCB,获得父进程的数据空间、堆、栈等资源的副本
  • 在父进程中返回子进程的PID,在子进程中返回0

执行完以上动作后,父进程和子进程便开始并发执行了。

有以下几点需要说明:

1、创建子进程后,父进程和子进程开始执行的起点

当父进程调用fork()后,fork()得到一个新的PID并进行复制副本、复制PCB等一系列子进程的准备工作后,此时父子两个进程将并发执行,这时候共有两个fork()存在,父子进程中都在等待着fork()函数的最后一步:返回值。这时候父进程中的fork()将返回子进程的PID,而子进程中的fork()返回0,此时可以引出下一个问题

2、为什么fork()函数可以做到返回两个值(说好的子进程是父进程的副本呢?)

由于子进程在创建时几乎复制了父进程的一切,自然也就包括了父进程的堆栈段,fork(&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值