父进程中连续两次fork的使用(理解一下课本P71-75代码)

//打印出两个hello;不难理解,主程序一个,子程序一个;那么如果是两个fork()呢?

#include "csapp.h" int main() {

  fork();  //位置1·

  fork();  //位置2

  printf("hello/n");

  exit(0); }

//结果打印出4个hello;
为什么会这样呢?
原来在创建子程序时,子程序会得到父程序的一份拷贝,那么其中也包括下一条指令指针。具体如下:

开始只有一个父进程;

父进程执行完第一个fork()(这时下一条指令指针变成位置2)。
  创建出的一个子进程(这个进程也会从位置2开始执行)
    所以这个子进程会又创建一子子进程;(这时就有两个子进程了)

父进程再执行第二个fork();
  又会创建一个子进程(这时就三个子进程了)
加上父进程一共四个,所以输出4个hello world;

 一言以蔽之,两次fork()是人为地创建一个工作子进程的父进程,然后让这个人为父进程退出,之后工作子进程就由init回收,避免了工作子进程成为僵尸进程。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值