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

笔记整理—linux进程部分(2)使用fork创建进程

        为什么要创建进程,首先每个程序的运行都需要一个进程;多进程实现宏观上的并行。

        fork的原理,是进程的分裂生长模式。如果操作系统需要一个新的进程,那么就会以cp的方法得到一个新的进程,此时老的进程是父进程,新的进程为子进程。

        pid_t fork(void),fork被调用一次会返回两次,返回0为子进程,大于0为父进程。

int main()
{printf("a.out\n");pid_t p1=-1;p1=fork();if(0==p1)
{printf("son  ");
}
if(0<p1)
{printf("father  ");
}printf("pid=%d\n",getpid());
}如果p1<0 fork则会错误

        两个printf分别是父进程于子进程的,但是父进程不一定在子进程之前执行。

        所以在运行时候要用if去判断谁是父进程,谁是子进程,子进程与父进程的分道扬镳之处就在fork()之后的部分。在父进程中,当if(p1>0)中的p1值为返回子进程的PID,父进程中fork返回值为子进程的PID,子进程中fork的返回值为0,父进程中PID返回值为子进程的ID,子进程使用getppid()得到父进程的ID。

        若父进程消亡,则getppid()返回用户的init进程,原因就是父进程消亡会上交进程号给init进程(user)。

        一但fork成功,则子进程与父进程将独立运行,有各自的PCB,父进程与子进程在内核中等待调度的机会。

        父进程对文件的操作问题:①子进程中会继承父进程打开的文件。正常情况下,父进程打开一个文件,fork创建子进程后,父子进程对文件的write是接续的,因为,lseek是关联的,像O_APPEND,但有时又只会有父子进程中的其中之一的内容,原因是父进程或子进程其中一个关闭文件过快,其中一个还没写完,就找不到入口了为了避免这一情况的发送,就可用通过信号或sleep函数实现延时关闭。

        ②父进程都去打开文件,正常情况下,分别写各自的文件表,有各自的lseek可以用O_APPEND实现关联,否则你写你的我写我的谁最后写就留下谁的文件。

        父进程在fork前干的事情是会影响到子进程的,只有在if的部分才是独立的,本质上希望子进程去干自己的活,不是两方干一模一样的活,还不如复制粘贴。

        进程消亡:①进程在运行过程中,占用看内存和IO,进程终止时才会完全释放这些资源。僵尸进程是指子进程先于父进程,每个进程在推出时,操作系统会回收资源,如当malloc没free,open没close都会在进程结束时候回收,但财政系统只回收了运行时消耗的内存与IO,没回收task_struct和栈内存。自身的8kb内存是无法自己回收的,使用要个收尸的,这个进程就是父进程,子进程结束父进程还没结束,这段时间就是僵尸进程。

        ②父进程调用wait()或waitpid()以显示的方式去收尸。

        ③父进程结束时,会在不调用wait/waitpid的情况下进行子进程的收尸操作,本质上是为了防止父进程忘记显示调用,防止内存泄漏。

        孤儿进程,父进程先于子进程消亡,Linux、将所有孤儿进程归于进程1的子进程。

相关文章:

笔记整理—linux进程部分(2)使用fork创建进程

为什么要创建进程&#xff0c;首先每个程序的运行都需要一个进程&#xff1b;多进程实现宏观上的并行。 fork的原理&#xff0c;是进程的分裂生长模式。如果操作系统需要一个新的进程&#xff0c;那么就会以cp的方法得到一个新的进程&#xff0c;此时老的进程是父进程&#xff…...

在Python中实现多目标优化问题(6)

在Python中实现多目标优化问题 在Python中实现多目标优化&#xff0c;除了传统的进化算法&#xff08;如NSGA-II、MOEA/D&#xff09;和一些基于机器学习的方法外&#xff0c;还有一些新的方法和技术。这些新方法通常结合了最新的研究成果&#xff0c;提供了更高效的解决方案。…...

Java EE中的编码问题及解决方案

Java EE中的编码问题及解决方案 在Java EE开发中&#xff0c;处理字符编码是确保数据正确传输和显示的重要环节。不同的编码不一致会导致乱码&#xff0c;影响用户体验。本文将总结在Java EE中可能遇到的编码问题及其解决方案。 1. 输入数据编码问题 在表单提交时&#xff0c…...

9月27日,每日信息差

第一、中国科学家团队在干细胞治疗领域取得重要突破&#xff0c;通过化学重编程技术成功制备出胰岛细胞&#xff0c;并用于移植治疗一名 1 型糖尿病患者&#xff0c;实现了临床功能性治愈。相关研究成果已发表在国际权威期刊《细胞》上。 第二、交通运输部公路局局长周荣峰在国…...

什么是 Angular 开发中的 Dumb components

Dumb components&#xff0c;在 Angular 开发中也被称为 Presentational components&#xff0c;它们的主要职责是通过展示数据和触发事件&#xff0c;把业务逻辑和 UI 表现分离开来。Dumb components 只通过 Input() 接收数据&#xff0c;Output() 向外发送事件&#xff0c;不…...

Docker 进入容器运行命令的详细指南

Docker 进入容器运行命令的详细指南 Docker 是一个开源的容器化平台&#xff0c;广泛应用于开发和生产环境中。它允许开发者打包应用程序及其依赖项到容器中&#xff0c;并能够在不同的平台上快速部署和运行。容器通常是独立且隔离的&#xff0c;但在开发、调试或维护过程中&a…...

如何禁止非真实用户的ip访问网站服务器

为了禁止非真实用户的IP访问网站服务器&#xff0c;可以采用多种技术手段和策略。以下是一些常用的方法&#xff1a; 1. 使用IP黑名单和白名单 黑名单&#xff1a;定期更新和维护一个IP黑名单&#xff0c;阻止已知的恶意IP地址或数据中心IP访问网站。白名单&#xff1a;对于特…...

探索SpringBoot:学科竞赛管理项目开发

2 相关技术简介 2.1Java技术 Java是一种非常常用的编程语言&#xff0c;在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中&#xff0c;Java的身影无处不在&#xff0c;并且拥有旺盛的生命力。Java的跨平台能力十分强大&#xff0c;只需一次编译&#xff0c;任…...

ultralytics yolo v8 示例:加载官方模型进行推理

Ultralytics YOLO 是计算机视觉和 ML 领域专业人士的高效工具。 安装 ultralytics 库&#xff1a; pip install ultralytics 实现代码如下&#xff1a; import cv2 from ultralytics import YOLO# 加载预训练的 YOLOv8n 模型 ckpt_dir "./ckpt/" # 模型缓存地址…...

【中间件学习】Nginx快速入门(为了配置一个项目)

-----------------------------本文章借鉴遇见狂神说--------------------------- 一、一个产品出现瓶颈&#xff1f;&#xff1f; 在一个产品刚刚上线的时候&#xff0c;并发量小&#xff0c;用户使用的少&#xff0c;所以在低并发的情况下&#xff0c;一个jar包启动应该就够…...

鸿蒙harmonyos next flutter通信之MethodChannel获取设备信息

本文将通过MethodChannel获取设备信息&#xff0c;以此来演练MethodChannel用法。 建立channel flutter代码&#xff1a; MethodChannel methodChannel MethodChannel("com.xmg.test"); ohos代码&#xff1a; private channel: MethodChannel | null nullthis.c…...

【笔记】原子结构的近代理论

近代原子结构理论的建立是从氢原子光谱得到启示的。 一、氢原子光谱与波尔理论 1.氢原子光谱 在装有两个电极的真空玻璃管内通入极少量高纯氢气&#xff0c;通高压电使之放电&#xff0c;管中发出的光束通过分光棱镜&#xff0c;得到分立的谱线&#xff0c;称为线状光谱。 发…...

【python】循环中断:break 和 continue

目录&#xff1a; while 循环的基础语法while 循环的基础案例while 循环的嵌套应用while 循环的嵌套案例for 循环的基础语法for 循环的嵌套应用循环中断&#xff1a;break 和 continue综合案例 学习目标&#xff1a; 掌握使用 continue 和 break 关键字控制循环 思考&#…...

WIFI密码默认显示

文章目录 需求分析遇到问题问题原因解决方案 需求 在进入设置&#xff0c;点击某一个wifi,连接wifi 界面&#xff0c;显示密码默认选中状态&#xff0c;效果如下 分析 在 WiFi密码被输入法挡住 中我们已经分析了整个流程&#xff0c;布局文件和控制中心。 结局系统设置WIFI连…...

Emiya 家今天的饭C++

题目&#xff1a; 样例解释&#xff1a; 【样例 1 解释】 由于在这个样例中&#xff0c;对于每组 i,j&#xff0c;Emiya 都最多只会做一道菜&#xff0c;因此我们直接通过给出烹饪方法、主要食材的编号来描述一道菜。 符合要求的方案包括&#xff1a; 做一道用烹饪方法 1、主要…...

Mybatis缓存机制(图文并茂!)

目录 一级缓存 需求我们在一个测试中通过ID两次查询Monster表中的信息。 二级缓存 案例分许(和上述一样的需求) EhCache第三方缓存 在了解缓存机制之前&#xff0c;我们要先了解什么是缓存&#xff1a; ‌缓存是一种高速存储器&#xff0c;用于暂时存储访问频繁的数据&…...

Git 工作区、暂存区和版本库

Git 工作区、暂存区和版本库 Git 是一个强大的版本控制系统&#xff0c;它帮助开发者管理代码历史&#xff0c;协作开发&#xff0c;以及跟踪和合并更改。为了更好地理解 Git 的工作流程&#xff0c;我们需要了解 Git 中的三个核心概念&#xff1a;工作区&#xff08;Workspac…...

SSH 远程连接到 Linux 服务器上的 SQLite

通过 SSH 远程连接到 Linux 服务器上的 SQLite 数据库文件的流程&#xff0c;可以分为以下几个步骤&#xff1a; 通过 SSH 连接到远程 Linux 服务器。在远程服务器上执行 SQLite 命令行工具&#xff0c;操作数据库文件。在本地使用工具&#xff0c;通过 SSH 隧道间接访问远程的…...

使用ElasticSearch-dump工具进行ES数据迁移、备份

elasticsearch-dump基本使用 该工具基于第三方Elasticdump工具来实现&#xff0c;仓库地址&#xff1a;https://github.com/elasticsearch-dump/elasticsearch-dump/tree/master&#xff0c;用于更加快捷方便的将Elasticsearch不同集群的数据进行索引备份和还原。 一、安装 …...

SpringMVC源码-SpringMVC源码请求执行流程及重点方法doDispatch讲解

一、开始请求 在浏览器访问http://localhost:8080/spring_mymvc/userlist这个接口&#xff0c;是个get请求。 FrameworkServlet类的service方法会被请求到: 调用路径如下&#xff1a; service:945, FrameworkServlet (org.springframework.web.servlet) service:764, HttpSer…...

数字边境守卫:拦截偷渡的非法算法

一、数字边境的隐喻&#xff1a;软件测试的守卫使命在数字化浪潮中&#xff0c;软件系统如同虚拟国境线&#xff0c;非法算法则似试图偷渡的入侵者。软件测试工程师正是这条边境的守卫者——通过精准的测试策略构建防御工事&#xff0c;拦截逻辑漏洞、数据泄露、恶意代码等&quo…...

Docker Compose 实践:多容器应用的配置与管理

Docker Compose 实践&#xff1a;多容器应用的配置与管理 前言 哥们&#xff0c;别整那些花里胡哨的理论。今天直接上硬菜——我在大厂一线使用 Docker Compose 的真实经验总结。作为一个白天写前端、晚上打鼓的硬核工程师&#xff0c;我对容器编排的追求就像对鼓点节奏的把控一…...

开端支路分布因子原理推导及Matlab程序编写

开端支路分布因子原理推导及matlab程序编写电力系统老司机都懂&#xff0c;支路开断后潮流重新分布的骚操作得靠分布因子。这玩意儿本质上是个灵敏度系数&#xff0c;说白了就是某条线路断了之后&#xff0c;其他线路得帮它扛多少锅。今天咱们直接上手推导&#xff0c;顺手撸个…...

Coze智能客服部署指南:从零搭建到生产环境最佳实践

最近在折腾智能客服系统的部署&#xff0c;发现市面上虽然方案不少&#xff0c;但真正能兼顾快速落地、稳定运行和成本可控的并不多。Coze 作为一个新兴的选项&#xff0c;以其灵活的架构和不错的性能吸引了我。经过一番从零到生产环境的摸索&#xff0c;我总结了一套部署指南&…...

vDisk课表同步指南:Windows/Linux平台配置详解

vDisk课表同步指南&#xff1a;Windows/Linux平台配置详解本指南旨在为使用 vDisk IDV 云桌面解决方案的学校和培训机构&#xff0c;提供一份详尽的 vDisk 课表同步配置指南&#xff0c;重点介绍 Windows 和 Linux 平台下的配置要点。通过本文&#xff0c;您将了解如何利用 Exc…...

MusePublic模型解释性研究:注意力可视化分析工具开发

MusePublic模型解释性研究&#xff1a;注意力可视化分析工具开发 1. 引言 当我们看到一幅由AI生成的精美画作时&#xff0c;常常会好奇&#xff1a;模型到底是根据什么来创作这幅作品的&#xff1f;哪些部分吸引了它的注意力&#xff1f;又是如何做出每一个绘画决策的&#x…...

HunyuanImage-3.0-Instruct:8步玩转AI创意绘图

HunyuanImage-3.0-Instruct&#xff1a;8步玩转AI创意绘图 【免费下载链接】HunyuanImage-3.0-Instruct-Distil 项目地址: https://ai.gitcode.com/tencent_hunyuan/HunyuanImage-3.0-Instruct-Distil 导语 腾讯混元最新发布的HunyuanImage-3.0-Instruct-Distil模型&a…...

高德API+ECharts实战:5分钟搞定最新行政区划地图可视化(附乡镇级GeoJSON下载)

高德API与ECharts融合实战&#xff1a;行政区划地图极速可视化指南 当我们面对需要展示行政区划变动的需求时&#xff0c;往往会遇到数据过时、格式不兼容等问题。本文将手把手教你如何利用高德API和ECharts&#xff0c;在5分钟内构建一个支持乡镇级数据展示的动态地图可视化方…...

手把手教你用Simulink和MATLAB搞定倒立摆:从物理建模到LQR控制器设计(附源码)

从零实现倒立摆控制&#xff1a;Simulink建模与LQR控制器实战指南 倒立摆系统作为控制理论中的"Hello World"&#xff0c;完美诠释了如何用数学工具驯服物理世界的不稳定性。本文将带您完整走通从物理建模到控制器设计的全流程&#xff0c;不仅解释每一步的底层逻辑&…...

语音交互背后的黑科技:ASR、NLP、TTS 如何让机器听懂人话?

语音交互背后的黑科技&#xff1a;ASR、NLP、TTS 如何让机器听懂人话&#xff1f; 当你说"播放周杰伦的《七里香》"时&#xff0c;智能音箱能在1秒内完成从声波识别到音乐播放的全流程。这背后是三项核心技术的无缝衔接&#xff1a;**ASR&#xff08;自动语音识别&am…...