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

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

最新文章

  1. Angular2中对ASP.NET MVC跨域访问
  2. Linux cp (复制)命令简介
  3. Day24_多线程第一天
  4. tar命令的详细解释
  5. linux强制umount设备的方法
  6. win8安装matlab7.0
  7. alias 命令
  8. 函数可重入问题reentrant functions(函数执行过程中可以被中断,允许多个副本)
  9. 《C程序设计语言现代方法》第5章 编程题
  10. gem安装时出现 undefined method `size' for nil:NilClass (NoMethodError) 的解决办法
  11. DynamicProxy系列目录
  12. C#基础回顾:正则表达式-转
  13. php 获取 mime type 类型,fileinfo扩展
  14. html5-section元素
  15. python中RabbitMQ的使用(路由键)
  16. linux 安装多个版本JDK,指定tomcat的jdk版本
  17. kubernetes备份和恢复
  18. Dlib与OpenCV图片转换
  19. VDOM configuration
  20. 使用PowerShell创建SSAS Role

热门文章

  1. js继承之Object.create()
  2. Vulkan Tutorial 29 Loading models
  3. (转)用JUnit4进行单元测试
  4. unrecognized font family "iconfont2"
  5. 百度地图JavaScript API使用
  6. cesium 获取点击点的高程
  7. idea项目上传到码云
  8. python cookbook第三版学习笔记十三:类和对象(三)描述器
  9. Python网络数据采集3-数据存到CSV以及MySql
  10. 安装oh-my-zsh