Linux|进程控制

进程创建

fork函数初识

在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。
返回值:子进程中返回0,父进程返回子进程id,出错返回-1
进程调用fork,当控制转移到内核中的fork代码后,内核做:

  • 分配新的内存块和内核数据结构(task_struct,mm_struct,页表等)给子进程
  • 将父进程部分数据结构内容拷贝至子进程
  • 添加子进程到系统进程列表当中
  • fork返回,开始调度器调度
    当一个进程调用fork之后,就有两个二进制代码相同的进程。而且它们都运行到相同的地方。但每个进程都将可以

当一个进程调用fork之后,就有两个二进制代码相同的进程。而且它们都运行到相同的地方。但每个进程都将可以开始它们自己的旅程

进程 = 1内核数据结构+2代码和数据
fork创建子进程的时候 是先1还是2呢?
答案是1举个例子我们去大学报名,是档案先去人后面再去

写时拷贝

通常,父子代码共享,但是数据不是是共享的,当任意一方试图写入,便以写时拷贝的方式各自一份副本。

fork调用失败的原因

系统中有太多的进程
实际用户的进程超过了限制

进程终止

想明白:终止在做什么?

  • 释放代码,数据(本身就不再被调度了)和内核数据结构
  • 但是task_struct 这个内核数据结构会被延期释放,因为要返回子进程的退出信息

进程终止的情况

进程终止的情况有三种

  • 代码跑完结果正确
  • 代码跑完结果不正确
  • 异常退出
main函数的返回值

main函数的返回值,我们称为退出码,关心方要知道进程指向情况怎么。
我们可以通过ehco $?来查看最近一个进程的退出码
对于一个进程来讲 0代表成功 非0表示失败,因为成功我们就不管了,但是失败了要知道是什么情况。刚好非零的数字特别多
在这里插入图片描述
在这里插入图片描述
退出码含义:
在这里插入图片描述
bash获取最近一个进程的退出码,要知道进程的执行情况怎么样?为用户负责。

自定义退出码

在这里插入图片描述

异常退出

比如说我们解引用空指针写入数据,会发生segmentation fault(段错误)
在这里插入图片描述
在这里插入图片描述
其实本质是操作系统给进程了一个信号
我举个例子证明,下面这个代码正常情况会一直运行
在这里插入图片描述
但是我们给它一个信号他就会报段错误
在这里插入图片描述
异常的时候我们看退出信号是什么就可以判断出是什么异常了

衡量一个进程退出只需要两个数字一个退出码另一个退出信号

如何终止进程

  • main函数return 表示进程终止
  • 代码任意位置调用_exit(),exit()函数表示进程终止

_exit() 和 exit()的区别

exit()退出的时候会刷新缓冲区而_exit()不会
在这里插入图片描述
在这里插入图片描述
用_exit()的结果
在这里插入图片描述
我们可以得出一个结论缓冲区一定不在操作系统内部,因为_exit()刷新不了缓冲区
在这里插入图片描述

进程等待

任何子进程在退出的情况下,一般必须有父进程进行等待。
为什么呢?

  • 父进程通过等待解决子进程退出的僵尸问题,回收系统资源
  • 获取子进程的退出信息

进程等待的操作

wait

  • wait 父进程等待任意一个进程
    在这里插入图片描述

staus 可以得到进程的退出码和退出信号,前16位没用
后16位开始 0~7位是退出码 第8位没用 ,9~15是退出信号
对于退出码我们只需要 status右移8位 退出码只需要 按位与0x7f(二进制01111 1111)
在这里插入图片描述

WIFEXITED(status): 查看是否正常退出

若为正常终止子进程返回的状态,则为真。(查看进程是否是正常退出)

WEXITSTATUS(status): 查看退出码的宏

上面位操作得到退出码 还是有点麻烦,我们可以利用系统给的宏WEXITSTATUS得到退出码
在这里插入图片描述
在这里插入图片描述

waitpid

在这里插入图片描述
waitpid 的作用是等待子进程,
参数

  • pid:pid = -1时等待任意一个进程,其他就是等待指定的一个进程
  • stat_loc 用于保存退出码和退出信号,我们不关心退出码和退出信号的时候可以把它设置为0
  • options 用于选择父进程是阻塞等待还是非阻塞等待。WNOHANG时是非阻塞等待其他是0

返回值

  • ret > 0: 检查成功
  • ret = 0: 检查成功,但子进程还在运行
  • ret< 0: 等待失败

非阻塞等待就是父进程等待的过程,可以干其他事情

非阻塞等待的例子:

在这里插入图片描述

进程替换

进程替换的函数

这些函数的参数是什么·等下再介绍,我们先来看一个现象
在这里插入图片描述

现象

我们发现运行了ls命令 之后没有运行printf了,类似于被夺舍了
在这里插入图片描述
在这里插入图片描述

原理

将进程中的代码和数据完全替换,没有创建新进程哦,
本质就是进程被加载到内存了
在这里插入图片描述

多进程版

对于单一的一个进程,进程替换了原来这个进程就直接没了,大部分场景的时候我们都不希望这样做。
本质是对代码发生了写时拷贝

execl 这些接口的参数

在这里插入图片描述

  • path:告诉要执行的文件在什么位置
  • arg*… 是可变参数,他的参数个数可以不固定,命令行怎么写就怎么传
  • 在这里插入图片描述
  • 在这里插入图片描述
    在这里插入图片描述
    带p的可以不用传文件路径了,直接在环境变量中找

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

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

相关文章

AVL 树的理解和简单实现

目录 1. AVL 树 1.1. AVL 树的概念 1.2. AVL 树的性质 2. AVL 树的框架如下 2. AVL树的 插入 2.1. 平衡因子的更新 2.2.1. 平衡因子更新的第一种情况 2.2.2. 平衡因子更新的第二种情况 2.2.3. 平衡因子更新的第三种情况 2.2.4. 平衡因子更新的代码框架如下 2.2. AV…

《C++学习笔记---初阶篇6》---string类 上

目录 1. 为什么要学习string类 1.1 C语言中的字符串 2. 标准库中的string类 2.1 string类(了解) 2.2 string类的常用接口说明 2.2.1. string类对象的常见构造 2.2.2. string类对象的容量操作 2.2.3.再次探讨reserve与resize 2.2.4.string类对象的访问及遍历操作 2.2.5…

5KVA电力高频逆变器DU5000HD不间断电源DU3000HD

UPS电力高频逆变器DU3000HD不间断电源模块DU5000HD&#xff0c;单机版2KVA逆变电源DU2000HD&#xff0c;并机版2KVA逆变器DU2000H&#xff0c;3KVA逆变装置DU3000H&#xff0c;DU5000H&#xff0c;IV2000HD-2&#xff0c;IV3000HD-2&#xff0c;IV5000HD-2&#xff0c;IV2000H-…

基于51单片机音乐倒计时倒数计数器设计( proteus仿真+程序+设计报告+原理图+讲解视频)

基于51单片机音乐倒计时设计( proteus仿真程序设计报告原理图讲解视频&#xff09; 仿真图proteus7.8及以上 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;S0090 1. 主要功能&#xff1a; 基于51单片机的音乐倒计时器设计 设计内…

47.乐理基础-音符的组合方式-连线

连线与延音线长得一模一样 它们的区别就是延音线的第三点&#xff0c;延音线必须连接相同的音 连线在百分之九十九的情况下&#xff0c;连接的是不同的音&#xff0c;如下图的对比&#xff0c;连线里的百分之1&#xff0c;以现在的知识无法理解&#xff0c;后续再写 在乐谱中遇…

解决在C#中方向键对控件焦点的控制

不要犹豫直接把下面这个程序复制进去就好了&#xff0c;不用担心0个引用&#xff0c;哈哈&#xff0c;可以的 public partial class MainForm : Form {public MainForm(){InitializeComponent();}protected override bool ProcessDialogKey(Keys keyData){// 检查是否是方向键…

Spring Boot 自动装配

本篇主要介绍Spring Boot 自动装配的相关内容。 目录 一、什么是自动装配 二、Bean的扫描方式 ComponentScan Import ImportSelector接口 三、Spring Boot自动装配原理 一、什么是自动装配 在我们在创建Spring Boot项目时往往会根据项目需求&#xff0c;引入很多第三方…

本地vite启动的vue项目使用nginx代理

前提&#xff1a; 必须在同一网段或者相同的局域网&#xff01;&#xff01;&#xff01; nginx下载通道&#xff1a; https://nginx.org/en/download.html 步骤&#xff1a; 1、最好下载稳定版本&#xff1a; 2、下载后直接解压&#xff08;注意&#xff1a;解压后不要放…

利用PS在不伤背景的前提下根据颜色去除图像上不想要的内容

下面为一个例子&#xff0c;去除图像上红色的虚线 Step1.用套索工具框选带有颜色的部分 Step2.切换到魔术棒工具&#xff0c;上端选项中&#xff0c;点击与选区交叉&#xff0c;连续这一项不要勾选 Step3.在需要去除的部分点击一下即可在框选范围内选中所有同颜色的区域&#x…

零基础学MySQL

1. 零基础学MySQL 1.1 数据库简介 1.1.1 数据库三层结构 1. 所谓安装Mysql数据库&#xff0c;就是在主机安装一个数据库管理系统(DBMS)&#xff0c;这个管理程序可以管理多个数据库。DBMS(database manage system) 2. 一个数据库中可以创建多个表,以保存数据(信息)。 3. 数据…

手写Windows文件路径获取小工具

手写Windows文件路径获取小工具 目的 给Windows右键增加功能&#xff0c;右键任何文件&#xff08;夹&#xff09;显示复制文件路径的扩展。 效果展示 实现思路 右键调用&#xff0c;自身会把文件路径传递给被调用文件&#xff0c;被调用文件内只需将路径参数复制到剪贴板即…

个人微信api

简要描述&#xff1a; 退出群聊 请求URL&#xff1a; http://域名地址/quitChatRoom 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/json Authorization&#xff1a;login接口返回 参数&#xff1a; 参数名 必选 类型 …

中国当代最具影响力的人物颜廷利:死神(死亡)并不可怕,可怕的是…

中国当代最具影响力的人物颜廷利&#xff1a;死神&#xff08;死亡&#xff09;并不可怕&#xff0c;可怕的是… 在中国优秀传统文化之中&#xff0c;汉语‘巳’字与‘四’同音&#xff0c;在阿拉伯数字里面&#xff0c;通常用‘4’来表示&#xff1b; 作为汉语‘九’字&#x…

docker(二):Centos安装docker

文章目录 1、安装docker2、启动docker3、验证 官方文档&#xff1a;https://docs.docker.com/engine/install/centos/ 1、安装docker 下载依赖包 yum -y install gcc yum -y install gcc-c yum install -y yum-utils设置仓库 yum-config-manager --add-repo http://mirrors…

KAN 笔记

1 Title KAN: Kolmogorov–Arnold Networks&#xff08;Ziming Liu, Yixuan Wang, Sachin Vaidya, Fabian Ruehle, James Halverson, Marin Soljačić, Thomas Y. Hou, Max Tegmark&#xff09;【2024】 2 Conclusion Inspired by the Kolmogorov-Arnold representat…

5.10.3 使用 Transformer 进行端到端对象检测(DETR)

框架的主要成分称为 DEtection TRansformer 或 DETR&#xff0c;是基于集合的全局损失&#xff0c;它通过二分匹配强制进行独特的预测&#xff0c;以及 Transformer 编码器-解码器架构。 DETR 会推理对象与全局图像上下文的关系&#xff0c;以直接并行输出最终的预测集。 1. …

【Linux】-Linux的实用操作:快捷键与软件安装操作、构建软连接、日期时区的设置[4]

目录 一、各类小技巧&#xff08;快捷键&#xff09; 1、ctrl c 强制停止 2、ctrl d 退出或登出 3、历史命令搜索 4、光标移动快捷键 5、清屏 二、软件安装 1、yum命令 2、apt命令 - 扩展&#xff08;ubuntu&#xff09; 三、systemctl命令 四、软连接 1、ln命令…

【字符函数与字符串函数】

文章目录 一、strlen函数1.strlen函数的使用2.strlen函数的模拟实现(1)计算器办法(2)不创建临时变量计数器(3)指针 二、strcpy函数1、strcpy函数的使用2、strcpy函数的模拟实现 三、strcat函数1、strcat函数的使用2、strcat模拟实现3、字符串自己给自己追加&#xff1f; 四、st…

01-单片机商业项目编程,从零搭建低功耗系统设计

一、引言 这是关于《单片机商业编程之从零搭建低功耗系统》的第一篇章&#xff0c;个人善忘&#xff0c;平常项目设计当中的一些思路&#xff0c;以前年轻的时候习惯性的录制成视频&#xff0c;也算是当作是自己的笔记&#xff0c;无奈现在喉咙实在扛不住&#xff0c;因此先尝试…

德克萨斯大学奥斯汀分校自然语言处理硕士课程汉化版(第一周) - 自然语言处理介绍和线性分类

自然语言处理介绍和线性分类 1. 自然语言处理介绍2. 线性二分类3. 情感分析和基础特征提取 3.1. 情感分析3.2. 特征提取3.3. 文本预处理 4. 学习的基础-梯度下降算法5. 感知机6. 逻辑回归7. 情感分析8. 感知机和逻辑回归 1. 自然语言处理介绍 自然语言处理的目标是什么 能够解…