当前位置: 首页 > news >正文

代码分析:循环创建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如何解决跨域问题&#xff1f;2.为什么要用Spring Boot&#xff1f;3. Spring Boot的约定优于配置&#xff0c;你的理解是什么&#xff1f;4. SpringBoot有哪些优点&#xff1f;5. Spring Boot中自动装配机制的原理&#xff1f;6.SpringBoot支持哪些日志框…...

岩土工程仪器多通道振弦传感器信号转换器应用于隧道安全监测

岩土工程仪器多通道振弦传感器信号转换器应用于隧道安全监测 多通道振弦传感器信号转换器VTI104_DIN 是轨道安装式振弦传感器信号转换器&#xff0c;可将振弦、温度传感器信号转换为 RS485 数字信号和模拟信号输出&#xff0c;方便的接入已有监测系统。 传感器状态 专用指示灯方…...

西瓜书读书笔记整理(五)—— 第四章 决策树

第四章 决策树 4.1 基本流程4.1.1 什么是决策树算法4.1.2 决策树学习的目的4.1.3 决策树学习基本过程4.1.4 决策树学习基本算法4.1.5 递归结束的三种情况 4.2 划分选择4.2.1 信息增益&#xff08;information gain&#xff09;—— ID3 决策树学习算法属性划分准则4.2.2 信息增…...

STM32 4G学习

硬件连接 ATK-IDM750C模块可直接与正点原子 MiniSTM32F103开发板板载的ATK模块接口&#xff08;ATK-MODULE&#xff09;进行连接。 功能说明 ATK-IDM750C是正点原子&#xff08;ALIENTEK&#xff09;团队开发的一款高性能4G Cat1 DTU产品&#xff0c;支持移动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个小知识点

目录 系列文章目录前端面试的性能优化部分&#xff08;1&#xff09;每天10个小知识点前端面试的性能优化部分&#xff08;2&#xff09;每天10个小知识点前端面试的性能优化部分&#xff08;3&#xff09;每天10个小知识点前端面试的性能优化部分&#xff08;4&#xff09;每天…...

【链表OJ 1】移除链表元素val

大家好&#xff0c;欢迎来到我的博客&#xff0c;此题是关于链表oj的第一题&#xff0c;此后还会陆续更新博客&#xff0c;如有错误&#xff0c;欢迎大家指正。 来源:https://leetcode.cn/problems/remove-linked-list-elements/description/ 题目: 方法一:定义prev和cur指针…...

复原 IP 地址——力扣93

文章目录 题目描述回溯题目描述 回溯 class Solution{public:static constexpr int seg_count=4<...

OSPF综合实验

实验题目如下&#xff1a; 实验拓扑如下&#xff1a; 实验要求如下&#xff1a; 【1】R4为ISP&#xff0c;其上只能配置IP地址: R4与其他所有直连设备间使用公有 【2】R3---R5/6/7为MGRE环境&#xff0c;R3为中心站点 【3】整个OSPF环境IP地址为172.16.0.0/16 【4】所有设备…...

安卓4G核心板开发板_MTK6785/MT6785(Helio G95)安卓手机主板方案

联发科MTK6785&#xff08;Helio G95&#xff09;安卓核心板采用八核 CPU 具有两个强大的 Arm Cortex-A76 处理器内核&#xff0c;主频高达 2.05GHz&#xff0c;外加六个 Cortex-A55 高效处理器。其强大的图形性能由 Arm Mali-G76 MC4 提供&#xff0c;速度可提升至 900MHz 。 …...

Linux 匿名页的生命周期

目录 匿名页的生成 匿名页生成时的状态 do_anonymous_page缺页中断源码 从匿名页加入Inactive lru引出 一个非常重要内核patch 匿名页何时回收 本文以Linux5.9源码讲述 匿名页的生成 用户空间malloc/mmap(非映射文件时&#xff09;来分配内存&#xff0c;在内核空间发生…...

设计模式概述与UML图

文章目录 一、设计模式概述1. 软件设计模式的产生背景2. 软件设计模式的概念3. 学习设计模式的必要性4. 设计模式分类&#xff08;1&#xff09;创建型模式&#xff08;2&#xff09;结构型模式&#xff08;3&#xff09;行为型模式 二、UML图1. 类图概述2. 类图作用3. 类图表示…...

使用Vscode编辑keil工程

一、需要安装的插件 1. Keil Assistant 2. C/C 3. 中文配置&#xff1a; 二、插件配置 1. Keil Assistant 添加Keil的安装路径 接下来就可以使用vscode编辑Keil的工程了&#xff0c;调试编译和下载程序需要返回到Keil中进行操作。 三、Vscode常用快捷键 可以自定义进行配置…...

编译工具:CMake(一) | 简介与安装

编译工具&#xff1a;CMake&#xff08;一&#xff09; | 简介与安装 1. CMake简介1.1CMake的特点 2. CMake 安装 这个是CMake的图标 1. CMake简介 cmake 是 kitware 公司以及一些开源开发者在开发几个工具套件(VTK)的过程中衍生品&#xff0c;最终形成体系&#xff0c;成为一…...

深度学习(34)—— StarGAN(1)

深度学习&#xff08;34&#xff09;—— StarGAN&#xff08;1&#xff09; 文章目录 深度学习&#xff08;34&#xff09;—— StarGAN&#xff08;1&#xff09;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转码器&#xff0c;可以将ES6代码转为ES5代码&#xff0c;从而在老版本的浏览器执行。这意味着&#xff0c;你可以用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&#xff08;依赖注入&#xff09;5. DL&#xff08;依赖查找&#xff09; 一. Spring框架概述…...

实习周记第三周

第二周总结 第二周主要是做了一些PC端细节内容。大的地方改的不多&#xff0c;但是小的细节蛮多。 值得一提的是&#xff0c;第二周做的微信小程序&#xff0c;改了很多逻辑。改逻辑需要与后端进行联调&#xff0c;收获很大&#xff0c;思路也愈发清楚。 记录做了什么是好习…...

游戏服务器检测扣除消耗防算数溢出的安全判断及解决方法

游戏服务器检测扣除消耗防算数溢出的安全判断及解决方法 数量 > (类型最大值 / 价格) 负数存在风险 价格 > (类型最大值 / 数量) || 价格 < (最小值 / 数量&#xff09; 游戏服务器在处理道具消耗时需防止数值溢出问题。当检测扣除消耗时&#xff0c;应进行双重安全判…...

【论文速递】BubbleRAG:为“黑盒”知识图谱打造高召回、高精度的证据检索引擎

黑盒知识图谱检索中的三个挑战&#xff1a;语义实例化不确定性、结构路径不确定性、证据比较不确定性 01 研究背景 在复杂问答&#xff08;如多跳推理、专家识别&#xff09;任务中&#xff0c;基于知识图谱&#xff08;KG&#xff09;的检索增强生成&#xff08;RAG&#x…...

基于MCGS嵌入版7.7的全自动洗车机组态仿真程序编写与流程图详解

MCGS洗车程序 MCGS嵌入版7.7组态仿真程序 全自动洗车机&#xff0c;脚本程序编写 有完整的流程图"这洗车机PLC程序怎么又卡在喷淋环节了&#xff1f;"凌晨两点的工控车间里&#xff0c;我盯着MCGS嵌入版的仿真界面直挠头。全自动洗车机的脚本调试真是个磨人的小妖精&…...

避开这些坑!Mapbox图层管理实战:动态加载GeoJSON数据的正确姿势

Mapbox高级图层管理实战&#xff1a;GeoJSON动态加载与性能优化全解析 当处理省级以上GIS数据可视化时&#xff0c;Mapbox的图层管理能力直接决定了应用的流畅度和用户体验。许多开发者在使用GeoJSON数据源时&#xff0c;常遇到内存泄漏、渲染卡顿、交互延迟等问题。本文将深入…...

别再为PyTorch GPU环境发愁了!手把手教你用Miniconda管理多版本CUDA(GTX1060实测)

深度学习环境配置实战&#xff1a;GTX1060显卡下的PyTorch GPU环境搭建指南 在深度学习领域&#xff0c;环境配置往往是新手面临的第一个挑战。特别是当您手头有一块GTX1060这样的经典显卡时&#xff0c;如何充分发挥其计算潜力&#xff0c;同时避免陷入版本兼容性问题的泥潭&…...

告别‘夜盲症’:用Python+OpenCV手把手教你实现红外与可见光图像融合(附完整代码)

实战指南&#xff1a;PythonOpenCV实现红外与可见光图像融合技术 夜间监控画面总是模糊不清&#xff1f;自动驾驶系统在低光照环境下识别率骤降&#xff1f;这些问题本质上都是"视觉夜盲症"的表现。今天我们将用最实用的方式&#xff0c;带你用Python和OpenCV构建一个…...

AI报告文档审核赋能数据不出域:IACheck重构机械制造行业本地化质量管控体系

在机械制造行业不断推进数字化与智能化转型的过程中&#xff0c;“数据不出域”逐渐从合规要求演变为一种核心能力&#xff0c;即在保障数据安全的前提下&#xff0c;实现数据的高效利用与价值转化&#xff0c;而在这一背景下&#xff0c;检测报告作为连接生产过程与质量评估的…...

手把手教你搭建PaddleOCR开发环境:从CUDA配置到模型验证

1. 环境准备&#xff1a;从零搭建PaddleOCR开发环境 最近在做一个票据识别的项目&#xff0c;需要用到OCR技术。对比了几种开源方案后&#xff0c;发现PaddleOCR不仅识别准确率高&#xff0c;而且对中文支持特别好。但在搭建环境时踩了不少坑&#xff0c;特别是CUDA和cuDNN的版…...

Java线程与操作系统线程的生命周期

平时不管是面试还是线上排查问题&#xff0c;线程生命周期都是绕不开的点&#xff0c;但我发现Java线程的状态和操作系统&#xff08;OS&#xff09;底层的线程状态很容易搞混&#xff0c;本文就来理清楚二者的区别。 先说个大前提&#xff1a; 我们常用的HotSpot虚拟机&#x…...

Gemma-3-12B-IT大模型微调实战:领域适配指南

Gemma-3-12B-IT大模型微调实战&#xff1a;领域适配指南 1. 微调前的准备工作 微调大模型听起来很高深&#xff0c;其实就像教一个聪明人学习新技能。Gemma-3-12B-IT本身已经懂很多东西了&#xff0c;我们要做的就是让它更擅长某个特定领域。开始之前&#xff0c;你需要准备好…...