最近在看操作系统的书,在讲到用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;

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

相关文章:

  • 2021-06-30
  • 2021-06-18
  • 2021-11-08
  • 2021-06-01
  • 2021-04-06
  • 2021-11-24
  • 2022-12-23
  • 2021-12-16
猜你喜欢
  • 2022-12-23
  • 2021-10-12
  • 2022-12-23
  • 2021-05-09
  • 2021-06-18
  • 2021-05-23
  • 2021-12-22
相关资源
相似解决方案