代码分析:循环创建N个子进程——为什么最后一个属于父进程?
黑马C/C++ 2018年32期代码分析
//循环创建n个子进程
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>int main()
{int i = 0;for(i=0; i<3; i++){//创建子进程pid_t pid = fork();if(pid<0) //fork失败的情况{perror("fork error");return -1;}else if(pid>0)//父进程{printf("father: pid==[%d], fpid==[%d]\n", getpid(),getppid());//sleep(1);}else if(pid==0) //子进程{printf("child: pid==[%d], fpid==[%d]\n", getpid(), getppid());break; //这句话非常重要,创建出的子进程并不会并发地和父进程一起继续执行余下的for循环语句,而是跳出循环,}}//第1个子进程if(i==0){printf("[%d]--[%d]: child\n", i, getpid()); }//第2个子进程if(i==1){printf("[%d]--[%d]: child\n", i, getpid()); }//第3个子进程if(i==2){printf("[%d]--[%d]: child\n", i, getpid()); }//父进程if(i==3){printf("[%d]--[%d]: child\n", i, getpid()); }sleep(10);return 0;
}
代码中的break:创建出的子进程并不会并发地和父进程一起继续执行余下的for循环语句,而是跳出循环。如果没有break,创建出的子进程将再次进入循环创建孙进程,就会导致以下事件出现:

由于创建子进程之后,父进程还需要继续执行循环以便完成循环创建任务,故在这个过程中 i 值还会继续发生变化,根据写时复制技术,当父进程要对 i 值进行改动时,操作系统会创建 i 值所在页面的副本,然后将这个副本映射到相应需要对页面进行修改的进程的地址空间,此时父进程要修改的 i 值是属于它自己的,与子进程所映射的页面的 i 值无关。
因此在代码中 i = 3 时,打印出来的是父进程。

相关文章:
代码分析:循环创建N个子进程——为什么最后一个属于父进程?
黑马C/C 2018年32期代码分析 //循环创建n个子进程 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <unistd.h>int main() {int i 0;for(i0; i<3; i){//创建子进程pid_t pid fork();if(pid&…...
【SpringBoot面试题整理-超级有效】
文章目录 1.SpringBoot如何解决跨域问题?2.为什么要用Spring Boot?3. Spring Boot的约定优于配置,你的理解是什么?4. SpringBoot有哪些优点?5. Spring Boot中自动装配机制的原理?6.SpringBoot支持哪些日志框…...
岩土工程仪器多通道振弦传感器信号转换器应用于隧道安全监测
岩土工程仪器多通道振弦传感器信号转换器应用于隧道安全监测 多通道振弦传感器信号转换器VTI104_DIN 是轨道安装式振弦传感器信号转换器,可将振弦、温度传感器信号转换为 RS485 数字信号和模拟信号输出,方便的接入已有监测系统。 传感器状态 专用指示灯方…...
西瓜书读书笔记整理(五)—— 第四章 决策树
第四章 决策树 4.1 基本流程4.1.1 什么是决策树算法4.1.2 决策树学习的目的4.1.3 决策树学习基本过程4.1.4 决策树学习基本算法4.1.5 递归结束的三种情况 4.2 划分选择4.2.1 信息增益(information gain)—— ID3 决策树学习算法属性划分准则4.2.2 信息增…...
STM32 4G学习
硬件连接 ATK-IDM750C模块可直接与正点原子 MiniSTM32F103开发板板载的ATK模块接口(ATK-MODULE)进行连接。 功能说明 ATK-IDM750C是正点原子(ALIENTEK)团队开发的一款高性能4G Cat1 DTU产品,支持移动4G、联通4G和…...
Golang 中实现实时聊天通讯
客户端代码 package mainimport ("fmt""log""net/url""os""os/signal""time""github.com/gorilla/websocket" )func main() {interrupt : make(chan os.Signal, 1)signal.Notify(interrupt, os.Interr…...
前端面试的性能优化部分(5)每天10个小知识点
目录 系列文章目录前端面试的性能优化部分(1)每天10个小知识点前端面试的性能优化部分(2)每天10个小知识点前端面试的性能优化部分(3)每天10个小知识点前端面试的性能优化部分(4)每天…...
【链表OJ 1】移除链表元素val
大家好,欢迎来到我的博客,此题是关于链表oj的第一题,此后还会陆续更新博客,如有错误,欢迎大家指正。 来源:https://leetcode.cn/problems/remove-linked-list-elements/description/ 题目: 方法一:定义prev和cur指针…...
复原 IP 地址——力扣93
文章目录 题目描述回溯题目描述 回溯 class Solution{public:static constexpr int seg_count=4<...
OSPF综合实验
实验题目如下: 实验拓扑如下: 实验要求如下: 【1】R4为ISP,其上只能配置IP地址: R4与其他所有直连设备间使用公有 【2】R3---R5/6/7为MGRE环境,R3为中心站点 【3】整个OSPF环境IP地址为172.16.0.0/16 【4】所有设备…...
安卓4G核心板开发板_MTK6785/MT6785(Helio G95)安卓手机主板方案
联发科MTK6785(Helio G95)安卓核心板采用八核 CPU 具有两个强大的 Arm Cortex-A76 处理器内核,主频高达 2.05GHz,外加六个 Cortex-A55 高效处理器。其强大的图形性能由 Arm Mali-G76 MC4 提供,速度可提升至 900MHz 。 …...
Linux 匿名页的生命周期
目录 匿名页的生成 匿名页生成时的状态 do_anonymous_page缺页中断源码 从匿名页加入Inactive lru引出 一个非常重要内核patch 匿名页何时回收 本文以Linux5.9源码讲述 匿名页的生成 用户空间malloc/mmap(非映射文件时)来分配内存,在内核空间发生…...
设计模式概述与UML图
文章目录 一、设计模式概述1. 软件设计模式的产生背景2. 软件设计模式的概念3. 学习设计模式的必要性4. 设计模式分类(1)创建型模式(2)结构型模式(3)行为型模式 二、UML图1. 类图概述2. 类图作用3. 类图表示…...
使用Vscode编辑keil工程
一、需要安装的插件 1. Keil Assistant 2. C/C 3. 中文配置: 二、插件配置 1. Keil Assistant 添加Keil的安装路径 接下来就可以使用vscode编辑Keil的工程了,调试编译和下载程序需要返回到Keil中进行操作。 三、Vscode常用快捷键 可以自定义进行配置…...
编译工具:CMake(一) | 简介与安装
编译工具:CMake(一) | 简介与安装 1. CMake简介1.1CMake的特点 2. CMake 安装 这个是CMake的图标 1. CMake简介 cmake 是 kitware 公司以及一些开源开发者在开发几个工具套件(VTK)的过程中衍生品,最终形成体系,成为一…...
深度学习(34)—— StarGAN(1)
深度学习(34)—— StarGAN(1) 文章目录 深度学习(34)—— StarGAN(1)1. 背景2. 基本思路3. 整体流程4. StarGAN v2(1) 网络结构(2) mapping network(3) style encoder(4)Loss 和之前…...
ES6系列之let、const、箭头函数使用的坑
变量提升块级作用域的重要性箭头函数this的指向rest参数和arguments 1.ECMAScript与Js的关系 2.Babel转码器 Babel是一个广泛使用的ES6转码器,可以将ES6代码转为ES5代码,从而在老版本的浏览器执行。这意味着,你可以用ES6的方式编写程序&…...
4.DNS和负载均衡
文章目录 coreDNS概念部署croeDNS测试 kubernetes多master集群结构master节点部署 负载均衡配置部署nginx做四层反向代理安装高可用 keepalivednginx监控脚本修改k8s中组件的配置文件 coreDNS 概念 coreDNS是kubernetes的默认DNS实现。可以为集群中的service资源创建一个资源名…...
【JavaEE进阶】Spring核心与设计思想
文章目录 一. Spring框架概述1. 什么是Spring框架2. 为什么要学习框架?3. Spring框架学习的难点 二. Spring 核心与设计思想1. 什么是容器?2. 什么是IoC?3. Spring是IoC容器4. DI(依赖注入)5. DL(依赖查找) 一. Spring框架概述…...
实习周记第三周
第二周总结 第二周主要是做了一些PC端细节内容。大的地方改的不多,但是小的细节蛮多。 值得一提的是,第二周做的微信小程序,改了很多逻辑。改逻辑需要与后端进行联调,收获很大,思路也愈发清楚。 记录做了什么是好习…...
云容笔谈效果对比评测: vs Stable Diffusion 3.5东方人像生成质量深度分析
云容笔谈效果对比评测: vs Stable Diffusion 3.5东方人像生成质量深度分析 1. 评测背景与目的 东方人像生成一直是AI图像生成领域的特殊挑战。西方模型在生成东方人脸时常常出现面部结构不自然、表情僵硬、缺乏东方神韵等问题。本次评测将深入对比「云容笔谈」和S…...
猫抓插件:浏览器资源嗅探的革命性解决方案
猫抓插件:浏览器资源嗅探的革命性解决方案 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否曾在浏览网页时,看到心仪的…...
RAG系统的需求分析
这个是一个基于私有知识库的智能对话平台,允许用户上传文档构建专属知识库,并通过自然语言交互的方式查询和获取知识。它结合了大语言模型和向量检索技术,让用户通过对话的形式与自己的知识库进行高效交互应用场景个人用户场景:学习助手&…...
网络安全的概念与规范:从基础到实践
网络安全的概念与规范:从基础到实践 在数字化浪潮席卷全球的今天,网络安全已成为国家安全的重要组成部分。本文将系统梳理网络安全的核心概念、发展历程、主要威胁、前沿趋势以及标准规范,帮助读者建立完整的网络安全知识体系。 一、网络安全…...
Vue3+Element Plus+Sortable.js:构建可定制化表格拖拽配置中心
1. 为什么需要表格拖拽配置中心 后台管理系统中最常见的需求之一就是表格展示数据。但不同用户对表格的展示需求往往不同:产品经理可能更关注日期和状态字段,运营人员则更看重用户行为和转化数据。传统解决方案是开发多个固定表格页面,但这会…...
大三下期末突击指南:从编译原理到大数据,这6门课我是怎么一周内搞定的
大三下期末突击指南:从编译原理到大数据,这6门课我是怎么一周内搞定的 距离期末考试只剩一周,面对算法分析、编译原理、嵌入式这些硬核课程,你是不是已经开始焦虑了?别担心,去年我也经历过同样的困境。通过…...
升级版会议纪要录音转文字工具 识别准转得快 整理省事体验好
前前后后踩过不下10款录音转写工具的坑,要么错字多到要逐行改,要么转出来的内容逻辑混乱,得花好几个小时捋顺,直到用到2026升级版的会议纪要录音转文字工具,才真的感受到什么叫识别准、转得快、整理省事体验好。今早开…...
3步打造B站高效体验:开源客户端的极致优化指南
3步打造B站高效体验:开源客户端的极致优化指南 【免费下载链接】BiliBili-UWP BiliBili的UWP客户端,当然,是第三方的了 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBili-UWP BiliBili-UWP作为一款开源客户端,专为Wi…...
Splunk Enterprise 9.4.10 (macOS, Linux, Windows) - 机器数据管理和分析
Splunk Enterprise 9.4.10 (macOS, Linux, Windows) - 机器数据管理和分析 安全信息和事件管理 (SIEM)、全面的日志管理和分析平台 请访问原文链接:https://sysin.org/blog/splunk-9/ 查看最新版。原创作品,转载请保留出处。 作者主页:sys…...
解决Legado书源调试难题:从问题诊断到环境优化的完整指南
解决Legado书源调试难题:从问题诊断到环境优化的完整指南 【免费下载链接】legado Legado 3.0 Book Reader with powerful controls & full functions❤️阅读3.0, 阅读是一款可以自定义来源阅读网络内容的工具,为广大网络文学爱好者提供一种方便、快…...
