关于操作系统中多个fork()会创建几个进程的理解

最近在看操作系统的书,在讲到用fork()创建子进程时,有些地方一时迷惑,最终理解,特记录下来。如下:

//创建一个子进程;
#include "csapp.h"

int main() {   
fork();   
printf("hello/n");   
exit(0);}

//打印出两个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;

这是我个人的理解,如果有大牛感觉这个理解有问题。请留言指点~谢谢

posted @ 2017-06-26 16:40  宇的季节  阅读(9444)  评论(0编辑  收藏  举报