进程的那些事--进程控制

news2024/11/17 11:25:10

目录

前言

一、创建进程

二、退出进程

void exit (int retval) 

三、进程等待 

四、进程替换


前言

提示:这里可以添加本文要记录的大概内容:

       前面我们认识了进程,现在让我们认识几个进程的接口


提示:以下是本篇文章正文内容,下面案例可供参考

一、创建进程

接口

        pid_t fork(void)

功能:通过复制父进程创建一个子进程

返回值:对于父进程返回子进程的pid,对子进程成功返回0,失败返回-1;

特点:父子进程,数据独有、代码共享。

数据独有,代码共享

        创建一个进程pcb,pcb中有一个指针指向虚拟地址空间(内存指针),指向的所以地址都会同页表映射到物理内存中,而代码中的g_val通过映射在物理内存中存储数据,当我们创建子进程,它就会复制子进程,它就会复制父进程(复制了所有的地址,映射关系,页表,若子进程修改g_val的数据,那么他会生成一个新的数据放到物理内存中,若不修改继续使用父进程的数据)。

目的:提高子进程的创建效率、节省了空间内存的申请与大量数据拷贝的过程。

        

接口

        pid_t vfork(void);
        创建出了的子进程与父进程共用一个虚拟地址空间与fork相比较少了拷贝,提高了效率

缺点

        父进程调用vfork创建了子进程后会阻塞、只有等到子进程exit退出,或子进程进行了程序替换(程序替换后子进程会有自己的虚拟地址空间,页表等)

二、退出进程

退出进程的三种方法

        1:在main函数中return ;

        2:使用库函数:void exit(int retval);

        3:系统调用接口:void_exit(int retval)

void exit (int retval) 

        库函数exit作用:在程序退出前刷新缓冲区,将缓冲区中数据写入文件中;

        系统调用接口exit:直接释放资源;

缓冲区:缓冲区是内存空间的一部分,当我们进行IO操作的时候不会理解IO,要先将数据放到缓                  冲区中,大量的小的数据累计到缓冲区中,当缓冲区满了。就累积成了大数据,再进行                  IO操作就可以达到,一次IO操作就写入了多次IO数据,减少了大量的IO操作,提高了效率

普通文件和标准输出(显示器设备文件)是不一样的:

        1.普通文件是全缓冲(缓冲区满的时候刷新缓冲区)

        2.显示器设备文件是行缓冲(数据在有换行就会刷新缓冲区)

        指令:echo$?  (获取进程返回值)

三、进程等待 

 作用

        创建一个子进程后,等待子进程的退出,获取子进程的退出状态,避免僵尸进程的产生

接口

   int wait (int *statu);  -- 阻塞接口

        阻塞:为了完成某个操作,发起调用。若不具备操作的完成条件,则调用一直等待

        非阻塞:为了完成某个操作,发起调用。若不具备操作的完成条件,立即报错返回。

        功能:等待一个子进程退出,若当前没有子进程退出,一直等待直到成功退出。

        返回值:返回值大于0代表退出成功,表示的是退出子进程的pid,出错返回-1

        参数:int *statu--表示整形空间的地址,报错退出子进程的退出状态。

   int waitpid (pid_t pid, int *statu, int option);  -- 阻塞接口

        功能:若pid参数设置为-1,表示等待任意子进程退出,否则就是等待指定子进程退出

        参数:

           pid:-1等待任意子进程,大于0表示等待指定子进程

           statu:获取退出子进程的退出状态

           option:0-默认阻塞操作,WNOHANG——非阻塞操作

statu:

        对于返回值用了一个字节来保存,在大多计算机在8位为一个字节,int类型是4个字节,及32位,其中前16位没有用到,后十六位中,前8位存储的是进程的退出码(进程的退出码只有一个字节)。低8位中的高1位有一个比特位的core dump标志,标记是否开启了核心转储功能。

        核心转储功能:

                core dump:程序异常退出时,保存程序的运行数据。

                目的:能够进行程序运行崩溃后的事后调试

        低7位:存储异常退出的信号值(崩溃)

                由于一个程序只有正常退出,返回值才是有意义的,所以问你获取返回退出码时,

                要先判断进程是否正常退出

        判断方法:低7位存储的是进程异常退出的信号值,低7位为0正常退出,非0表示异常                              退出

        低7位获取方法:statu & 0x7F

        中8位获取:(statu >> 8) & 0xFF

判断进程是否正常:

        接口:WIFEXITED(statu) 正常为真,否则为假——0为假,非0为真

                   WEXITSTATUS(statu) 提取statu的退出码——宏定义在<sys/ait.h>头文件中

                   例:printf("statu: %d\n", WEXITSTATUS(statu) );

四、进程替换 

        概念:替换进程的描述信息,让当前进程描述另一个进程(程序的运行过程) 

        功能:让一个进程运行另一个程序

接口:

        int execve(char* path, char* argv[], char* env[]);

功能:程序替换

参数:

        path:一个新的进程的路径名

        argv:要运行的新程序的运行参数

        env:要运行的新程序的环境变量

返回值:替换成功返回-1,失败没有返回值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2167244.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL_表_进阶(2/2)

上一章我们谈了排序子句&#xff0c;使用ORDER BY 字段 DESC/ASC。以及左右连接的多关系查询。 今天&#xff0c;没错&#xff0c;四张表最后两个需求 ✨涉及聚合函数查询与指定别名 四张表&#xff1a; 学院表&#xff1a;(testdb.dept) 课程表&#xff1a;(testdb.course) 选…

MT5016A-ASEMI三相整流桥MT5016A

编辑&#xff1a;ll MT5016A-ASEMI三相整流桥MT5016A 型号&#xff1a;MT5016A 品牌&#xff1a;ASEMI 封装&#xff1a;D-63 批号&#xff1a;2024 类型&#xff1a;三相整流桥 电流&#xff08;ID&#xff09;&#xff1a;50A 电压(VF)&#xff1a;1600V 安装方式&a…

示例说明:elasticsearch实战应用

Elasticsearch 是一个基于 Lucene 的分布式搜索和分析引擎&#xff0c;广泛应用于日志分析、全文搜索、数据可视化等领域。以下是 Elasticsearch 实战应用的一些关键点和步骤&#xff1a; 1. 环境搭建 首先&#xff0c;你需要在你的环境中安装和配置 Elasticsearch。 安装 E…

K8S精进之路-控制器StatefulSet有状态控制 -(2)

状态说明 在进行StatefulSet部署之前&#xff0c;我们首先可能要了解一下&#xff0c;什么是"有状态应用"和"无状态应用"。无状态应用就是pod无论部署在哪里&#xff0c;在哪台服务器上提供服务&#xff0c;都是一样的结果&#xff0c;比如经常用的nginx。…

Django5 使用pyinstaller打包成 exe服务

首先&#xff1a;确保当前的django项目可以完美运行&#xff0c;再进行后续操作 python manage.py runserver第一步 安装 pyinstaller pip install pyinstaller第二步 创建spec 文件 pyinstaller --name manage --onefile manage.pypyinstaller&#xff1a;这是调用 PyInsta…

SpringBoot 流式输出时,正常输出后为何突然报错?

一个 SpringBoot 项目同时使用了 Tomcat 的过滤器和 Spring 的拦截器&#xff0c;一些线程变量在过滤器中初始化并在拦截器中使用。 该项目需要调用大语言模型进行流式输出。 项目中&#xff0c;笔者使用 SpringBoot 的 ResponseEntity<StreamingResponseBody> 将流式输…

【YOLO目标检测马铃薯叶病害数据集】共1912张、已标注txt格式、有训练好的yolov5的模型

目录 说明图片示例 说明 数据集格式&#xff1a;YOLO格式 图片数量&#xff1a;1912 标注数量(txt文件个数)&#xff1a;1912 标注类别数&#xff1a;5 标注类别名称&#xff1a; health General early blight Severe early blight General late blight Severe late bligh…

Vue3使用vue-quill富文本编辑器实现图片大小调整

安装uill-image-resize npm install quill-image-resize --save在项目中导入并注册插件 import { QuillEditor, Quill } from vueup/vue-quill; import ImageUploader from quill-image-uploader; import ImageResize from quill-image-resize; //导入插件 import vueup/vue-…

webservice xfire升级为cxf cxf常用注解 cxf技术点 qualified如何设置

关键点 确保参数名称保持一致确保参数命名空间保持一致确保接口命名空间保持一致确保请求头设置正确确保用soapui工具解析的参数结构一致 cxf常用注解 定义接口用到的注解 定义接口名称&#xff0c;和接口命名空间 WebService(name“ams” ,targetNamespace “http://ifac…

海山数据库(He3DB)+AI(五):一种基于强化学习的数据库旋钮调优方法

[TOC] 0 前言 在海山数据库(He3DB)AI&#xff08;三&#xff09;中&#xff0c;介绍了四种旋钮调优方法&#xff1a;基于启发式&#xff0c;基于贝叶斯&#xff0c;基于深度学习和基于强化学习。本文介绍一种基于强化学习的旋钮调优方法&#xff1a;QTune: A Query-Aware Dat…

回归预测 | Matlab基于SO-ESN蛇群算法优化回声状态网络多输入单输出回归预测

回归预测 | Matlab基于SO-ESN蛇群算法优化回声状态网络多输入单输出回归预测 目录 回归预测 | Matlab基于SO-ESN蛇群算法优化回声状态网络多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.蛇群算法(SO)优化回声状态网络做拟合回归预测&#xff0c;…

Spring Security - 用户授权

1.用户授权介绍&#xff1a; 在SpringSecurity中&#xff0c;会使用默认的FilterSecurityInterceptor来进行权限校验。在FilterSecurityInterceptor中会从SecurityContextHolder获取其中的Authentication&#xff0c;然后获取其中的权限信息。判断当前用户是否拥有访问当前资源…

汉口银行IPO之路再添坎坷:多名股东甩卖股权,内控是“老大难”

撰稿|芋圆 近日&#xff0c;总部设在武汉的商业银行——汉口银行股份有限公司&#xff08;以下简称“汉口银行”&#xff09;的股权再现交易信息&#xff0c;先后“亮相” 上海联合产权交易所、北京产权交易所&#xff0c;出售股权的股东包括中国电信以及中国移动全资子公司等…

神经网络(五):U2Net图像分割网络

文章目录 一、网络结构1.1第一种block结构1.2第二种block结构1.3特征图融合模块1.4损失函数1.5总体网络架构1.6代码汇总1.7普通残差块与RSU对比 二、代码复现 参考论文&#xff1a;U2-Net: Going deeper with nested U-structure for salient object detection   这篇文章基于…

从销售到 AI 算法工程师 | 转行人工智能大模型(含面经裁员幸存指南)

我叫王东&#xff0c;90后&#xff0c;和大家分享一下我的人工智能转型之路。 农学毕业&#xff0c;投身互联网做销售 机遇难求&#xff0c;养殖梦碎 我是土生土长的农村人&#xff0c;小时候经常和小鱼小虾打交道&#xff0c;上大学的时候就选择了农学专业&#xff0c;想着…

qmt量化交易策略小白学习笔记第67期【qmt编程之获取ETF申赎清单】

qmt编程之获取ETF申赎清单 qmt更加详细的教程方法&#xff0c;会持续慢慢梳理。 也可找寻博主的历史文章&#xff0c;搜索关键词查看解决方案 --获取ETF申赎清单&#xff01; 实盘或回测qmt&#xff0c;可关注博主咨询~ ETF申赎清单 提示 使用前需要调用xtdata.download_…

JDBC 事务

文章目录 准备数据JDBC操作事务API介绍案例代码小结 准备数据 # 创建一个表&#xff1a;账户表. create database day05_db; # 使用数据库 use day05_db; # 创建账号表 create table account(id int primary key auto_increment,name varchar(20),money double ); # 初始化数据…

如何管理自己的工作任务和时间

在当今快节奏的工作环境中&#xff0c;有效地管理工作任务和时间是取得成功和保持工作生活平衡的关键。以下是一些实用的方法&#xff0c;可以帮助你更好地掌控自己的工作。 一、明确工作任务 1、制定任务清单 每天开始工作前&#xff0c;列出当天需要完成的所有任务。可以使用…

PWA(Progressive web APPs,渐进式 Web 应用)

文章目录 引言I 什么是 PWA功能特性II Web 应用清单引言 PWA 是 Google 于 2016 年提出的概念,于 2017 年正式落地,于 2018 年迎来重大突破,全球顶级的浏览器厂商,Google、Microsoft、Apple 已经全数宣布支持 PWA 技术。 PWA 目的是通过各种 Web 技术实现与原生 App 相近…

Java读取YAML文件

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storm…