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

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

目录

前言

一、创建进程

二、退出进程

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,失败没有返回值

相关文章:

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

目录 前言 一、创建进程 二、退出进程 void exit (int retval) 三、进程等待 四、进程替换 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 前面我们认识了进程&#xff0c;现在让我们认识几个进程的接口 提示&#xff1a;以下是本篇文章正文内容…...

FortiOS SSL VPN 用户访问权限配置

简介 使用不同用户组或用户登录 SSL VPN 隧道模式后&#xff0c;可配置不同的访问权限。 本文介绍为不同用户组分配不同访问权限的配置方法。 相关组件 FortiGate&#xff1a;FortiOS v6.4.14 build2093 (GA) 客户端&#xff1a;Windows11&#xff0c;安装 FortiClient VPN 7.…...

C++_vector类

欢迎来到本期节目- - - vector类 本期直接先上代码&#xff0c;然后以代码为例介绍需要注意的问题. 模拟实现&#xff1a; #pragma once #include<iostream> #include<assert.h> using namespace std;namespace my_room {template<class T>class vector{p…...

Spring Boot入门到精通:网上购物商城系统

第3章 系统分析 3.1 可行性分析 在系统开发之初要进行系统可行分析&#xff0c;这样做的目的就是使用最小成本解决最大问题&#xff0c;一旦程序开发满足用户需要&#xff0c;带来的好处也是很多的。下面我们将从技术上、操作上、经济上等方面来考虑这个系统到底值不值得开发。…...

在Vue.js中,你可以使用Element UI的el-input组件结合计算属性来实现模糊查询

<template><div><el-input v-model"searchQuery" placeholder"请输入查询内容"></el-input><div v-for"item in filteredList" :key"item">{{ item }}</div></div> </template><s…...

delphi制作漂亮的农历窗体(IntraWeb+Layui的完美结合)

delphi制作漂亮的农历窗体&#xff08;IntraWebLayui的完美结合&#xff09; 不需要安装服务器&#xff0c;Apache和IIS都不需要&#xff0c;自带企业级服务器。 运行exe服务器就架好了&#xff0c;直接打开手机浏览器或者电脑浏览器&#xff0c;网页就出来了&#xff0c;如果…...

发票OFD格式转换成PDF

引入依赖&#xff0c;低版本的报错&#xff0c;2.0.2能够实现转换 <dependency><groupId>org.ofdrw</groupId><artifactId>ofdrw-converter</artifactId><version>2.0.2</version><exclusions><exclusion><groupId&g…...

高通AI应用程序开发3:网络模型(一)

1. 支持的网络模型 Qualcomm神经处理SDK支持下表所列的网络模型。 有关支持的运行时和单个图层类型的限制和约束的详细信息&#xff0c;请参阅 限制 。 GPU运行时中支持的所有层对两种GPU模式都有效&#xff1a;GPU_FLOAT32_16_HYBRID和GPU_FLAAT16。GPU_FLOAT32_16_HYBRID-…...

03. 前端面试题之ts : typescript 的数据类型有哪些?

文章目录 一、typescript是什么二、typescript有哪些数据类型booleannumberstringarraytupleenumanynull 和 和 undefinedvoidneverobject 三、总结 一、typescript是什么 typescript 和 javascript几乎一样&#xff0c;拥有相同的数据类型&#xff0c;另外在javascript基础上…...

PyCharm和VS Code 安装通义灵码,可本地安装包安装,解决插件安装不上问题

PyCharm和VS Code 安装通义灵码&#xff0c;可本地安装包安装&#xff0c;解决插件安装不上问题 PyCharm、VS Code 安装通义灵码介绍主要应用场景支持编程语言安装指南JetBrains IDEs 中安装指南步骤 1&#xff1a;准备工作步骤 2&#xff1a;在 JetBrains IDEs 中安装通义灵码…...

机器人速度雅可比矩阵求解(2自由度平面关节机器人)

关节速度和末端速度空间的映射需要计算雅可比矩阵的逆矩阵,在博途PLC里如何计算一个方阵的逆矩阵,大家可以参考下面这篇文章: 博途PLC矩阵求逆 矩阵求逆 博图SCL_博图矩阵运算-CSDN博客文章浏览阅读839次。本文介绍如何用C语言实现矩阵求逆的过程,详细解析了相关代码,适…...

【AI大模型-文心-思维树解读-开篇】

提问&#xff1a;什么是“”“思维树”“”模型框架 回答&#xff1a;如下 版本&#xff1a;文心大模型3.5 “思维树”&#xff08;Tree of Thoughts, ToT&#xff09;模型框架是一个利用大型语言模型进行问题解决的框架。它借鉴了人类认知研究的成果&#xff0c;特别是关于人…...

2、electron vue3 怎么创建子窗口,并给子窗口路由传参

接上回初始化vue3 electron项目&#xff0c;创建完vue3 electron项目后&#xff0c;现在要实现在渲染进程中点击按钮创建一个新的子窗口 开始 子窗口创建操作只能在主线程内完成&#xff0c;而创建操作是在渲染线程触发&#xff0c;因此就需要进行两者间的通讯。 1、创建子窗…...

8.pod数据持久化

&#x1f482; 个人主页: Java程序鱼 &#x1f4ac; 如果文章对你有帮助&#xff0c;欢迎关注、点赞、收藏(一键三连)和订阅专栏 &#x1f464; 微信号&#xff1a;hzy1014211086&#xff0c;想加入技术交流群的小伙伴可以加我好友&#xff0c;群里会分享学习资料、学习方法…...

C语言 | Leetcode C语言题解之第436题寻找右区间

题目&#xff1a; 题解&#xff1a; typedef struct {int start;int index; } Node;int cmp(const void *pa, const void *pb) {return ((Node *)pa)->start - ((Node *)pb)->start; }int* findRightInterval(int** intervals, int intervalsSize, int* intervalsColSiz…...

SpringBoot3中ymal配置文件(持续更新)

博客主页&#xff1a;音符犹如代码系列专栏&#xff1a;JavaWeb关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 在SpringBoot项目中,使用application.properties进行配置管理时&#xff0c;…...

Linux 基础IO 2

读取与写入 read与fread 在基础IO 1中我们学会了open和fopen的函数这两个函数是用于为进程打开文件也可以理解为为进程和文件建立了一个链接使其可以交互。那我们建立号链接之后肯定还是需要对文件进行操作&#xff0c;现在我们先来了解读取操作。 read&#xff1a; 这是一…...

图像预处理 图像去噪之常见的去噪方法

图像去噪是图像预处理中的一项关键技术&#xff0c;其目的是从含有噪声的图像中恢复出无噪声的图像&#xff0c;以提高图像质量和后续图像分析的准确性。图像去噪方法众多&#xff0c;本文将介绍几种常见的去噪方法&#xff0c;并提供相应的代码示例。 1. 均值滤波&#xff08…...

代码随想录Day53|102.沉没孤岛 、103.水流问题 、104.建造最大岛屿

102.沉没孤岛 import java.util.*;class Main{public static int[][] dir {{0,1},{1,0},{0,-1},{-1,0}};public static void main (String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int m sc.nextInt();int[][] grid new int[n][m];for(int i 0…...

19c-pfile

经常需要rman恢复测试&#xff0c;创建一个单机pfile&#xff0c;需要时手动修改使用&#xff0c;以20g内存为例 orcl.__data_transfer_cache_size0 orcl.__db_cache_size13824425984 orcl.__inmemory_ext_roarea0 orcl.__inmemory_ext_rwarea0 orcl.__java_pool_size0 orcl._…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙

Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...

echarts使用graphic强行给图增加一个边框(边框根据自己的图形大小设置)- 适用于无法使用dom的样式

pdf-lib https://blog.csdn.net/Shi_haoliu/article/details/148157624?spm1001.2014.3001.5501 为了完成在pdf中导出echarts图&#xff0c;如果边框加在dom上面&#xff0c;pdf-lib导出svg的时候并不会导出边框&#xff0c;所以只能在echarts图上面加边框 grid的边框是在图里…...

Appium下载安装配置保姆教程(图文详解)

目录 一、Appium软件介绍 1.特点 2.工作原理 3.应用场景 二、环境准备 安装 Node.js 安装 Appium 安装 JDK 安装 Android SDK 安装Python及依赖包 三、安装教程 1.Node.js安装 1.1.下载Node 1.2.安装程序 1.3.配置npm仓储和缓存 1.4. 配置环境 1.5.测试Node.j…...

算法刷题-回溯

今天给大家分享的还是一道关于dfs回溯的问题&#xff0c;对于这类问题大家还是要多刷和总结&#xff0c;总体难度还是偏大。 对于回溯问题有几个关键点&#xff1a; 1.首先对于这类回溯可以节点可以随机选择的问题&#xff0c;要做mian函数中循环调用dfs&#xff08;i&#x…...

【Java】Ajax 技术详解

文章目录 1. Filter 过滤器1.1 Filter 概述1.2 Filter 快速入门开发步骤:1.3 Filter 执行流程1.4 Filter 拦截路径配置1.5 过滤器链2. Listener 监听器2.1 Listener 概述2.2 ServletContextListener3. Ajax 技术3.1 Ajax 概述3.2 Ajax 快速入门服务端实现:客户端实现:4. Axi…...

STL 2迭代器

文章目录 1.迭代器2.输入迭代器3.输出迭代器1.插入迭代器 4.前向迭代器5.双向迭代器6.随机访问迭代器7.不同容器返回的迭代器类型1.输入 / 输出迭代器2.前向迭代器3.双向迭代器4.随机访问迭代器5.特殊迭代器适配器6.为什么 unordered_set 只提供前向迭代器&#xff1f; 1.迭代器…...