UNIX编程中fork()的使用是怎样的原理?

如题... 如题 展开
 我来答
百度网友d44faec
推荐于2016-05-01 · TA获得超过640个赞
知道小有建树答主
回答量:699
采纳率:0%
帮助的人:179万
展开全部

#include<unistd.h>

  #include<sys/types.h>

  函数定义:

  pid_t fork( void);

  (pid_t 是一个宏定义,其实质是int 。定义在<sys/types.h>中)

  返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID;否则,出错返回-1

  函数说明:

  一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程(child process)。fork函数被调用一次但返回两次。两次返回的唯一区别是子进程中返回0值而父进程中返回子进程ID。

  子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。注意,子进程持有的是上述存储空间的“副本”,这意味着父子进程间不共享这些存储空间。

  linux将复制父进程的地址空间内容给子进程,因此,子进程有了独立的地址空间。

  为什么fork会返回两次?

  由于在复制时复制了父进程的堆栈段,所以两个进程都停留在fork函数中,等待返回。因为fork函数会返回两次,一次是在父进程中返回,另一次是在子进程中返回,这两次的返回值是不一样的。过程如下图

调用fork之后,代码有两份,都从fork函数中返回,箭头表示各自的执行处

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式