关于操作系统中多个fork()会创建几个进程的理解
2024-10-16 03:01:10
最近在看操作系统的书,在讲到用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;
这是我个人的理解,如果有大牛感觉这个理解有问题。请留言指点~谢谢
最新文章
- Angular2中对ASP.NET MVC跨域访问
- Linux cp (复制)命令简介
- Day24_多线程第一天
- tar命令的详细解释
- linux强制umount设备的方法
- win8安装matlab7.0
- alias 命令
- 函数可重入问题reentrant functions(函数执行过程中可以被中断,允许多个副本)
- 《C程序设计语言现代方法》第5章 编程题
- gem安装时出现 undefined method `size' for nil:NilClass (NoMethodError) 的解决办法
- DynamicProxy系列目录
- C#基础回顾:正则表达式-转
- php 获取 mime type 类型,fileinfo扩展
- html5-section元素
- python中RabbitMQ的使用(路由键)
- linux 安装多个版本JDK,指定tomcat的jdk版本
- kubernetes备份和恢复
- Dlib与OpenCV图片转换
- VDOM configuration
- 使用PowerShell创建SSAS Role