【Linux】进程_8

文章目录

  • 五、进程
    • 10. 进程等待
      • 阻塞等待和非阻塞等待
    • 11. 进程程序替换
  • 未完待续


五、进程

10. 进程等待

上一篇我们知道了 wait 和 waitpid 函数都有一个 status 参数,这个参数是什么呢?这个参数其实就是进程的返回结果,当子进程结束的时候,就会返回这个值给父进程。
在这里插入图片描述
由上图可知status由三部分组成,其中高16字节不使用,低16字节中的高8字节存储着退出码的信息,低16字节中的第7位字节存储着退出信号的信息。退出信号非0代表程序异常退出,退出码非0代表程序的运行结果不正确。

阻塞等待和非阻塞等待

在这里插入图片描述
形参参入 0 是阻塞等待,传入 WNOHANG 是非阻塞等待。阻塞等待就是当父进程没有收到子进程的返回结果时,会在此阻塞,非阻塞等待就是父进程没有收到子进程的返回结果时,仍可以执行其他代码,并不会将父进程阻塞至此。但是需要 轮询操作 来检查子进程是否已经执行完毕。
选择使用阻塞等待还是非阻塞等待取决于具体的应用场景和需求。有些情况下需要保证操作的正确性和顺序性,适合使用阻塞等待;而有些情况下需要提高程序的效率,适合使用非阻塞等待。

11. 进程程序替换

用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支), 子进程往往要调用一种exec函数以执行另一个程序当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec并不创建新进程,所以调用exec前后该进程的id并未改变。
在这里插入图片描述
有六种以exec开头的函数,统称exec函数:
在这里插入图片描述
我们来写一个程序替换的程序。
在这里插入图片描述
在这里插入图片描述
程序替换一旦成功,exec之后的代码就不再执行。 exec函数只有失败后才会有返回值,成功了没有返回值。替换完成后不会创建新的程序。我们知道,创建一个进程时,先创建的是 PCB,地址空间,页表等,然后再将程序加载到内存,将程序加载到内存与程序替换的本质是一样的。
由于进程具有独立性,子进程替换的时候会发生写实拷贝,所以不影响父进程的代码,父进程同样可以等待子进程的返回结果。
在这里插入图片描述

这些函数原型看起来很容易混,但只要掌握了规律就很好记。
l(list) : 表示参数采用列表
v(vector) : 参数用数组
p(path) : 有p自动搜索环境变量PATH
e(env) : 表示自己维护环境变量

进程程序替换,不会替换环境变量数据。

上面的6个函数都是 execve 函数的封装。
在这里插入图片描述


未完待续

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【考研数学】如何保证进度不掉队?暑假强化保姆级规划

数一125学长前来解答!一句话,跟对老师,抓基础,有计划的进行复习才是关键! 数学基础非常重要,包括高等数学、线性代数和概率论等基础知识点。要确保对这些基础知识有扎实的掌握。 按照教材的顺序&#xff…

Go - 1.Go 语言安装

目录 一.引言 二.下载与安装 1.下载 PKG 2.安装 PKG 三.验证 一.引言 最近开始从头学习 Go 语言,趁着这个机会把学习当中遇到的坑进行整理。学习前首先下载 Go 的安装包。 二.下载与安装 1.下载 PKG 官网地址: All releases - The Go Programming Language …

如何实现element表格合并行?

前两天我一个朋友咨询我element表格合并行的问题,他研究了很久,已经开始怀疑是不是element UI出现了bug,然后跟我一阵沟通,最终解决了问题,他的问题在于他把事情想复杂了,接下来我们一起来看一下这个经典“案例”,很多人真的很有可能走入这个误区,当然老鸟就不用看了,…

centos7 xtrabackup mysql 基本测试(1)---虚拟机环境安装

centos7 xtrabackup mysql 基本测试(1)—虚拟机环境安装 win10 建立目录 G:\centos7_mini_1810_server_test\ 下载 centos7 安装文件 CentOS-7-x86_64-Minimal-1810.iso CentOS7_64_mini_1810_server_test G:\centos7_mini_1810_server_test 开…

期末模拟GGG--求逆序数

求逆序数 #include <stdio.h> # include <math.h>unsigned int reverse( unsigned int number );int main() {unsigned int n;scanf("%u", &n);printf("%u\n", reverse(n));return 0; } 函数实现&#xff1a; unsigned int reverse( unsi…

uniapp 微信小程序更改轮播图指示点

仅微信小程序有效 /* #ifdef MP-WEIXIN */// 默认指示点样式wx-swiper .wx-swiper-dot {position: relative;background-color: #ffffff;width: 28rpx;border-radius: 10rpx;height: 8rpx;opacity: 0.4;}// 当前选中样式wx-swiper .wx-swiper-dot-active {background-color: #f…

【 ARMv8/ARMv9 硬件加速系列 3.5.1 -- SVE 谓词寄存器有多少位?】

文章目录 SVE 谓词寄存器(predicate registers)简介SVE 谓词寄存器的位数SVE 谓词寄存器对向量寄存器的控制SVE 谓词寄存器位数计算SVE 谓词寄存器小结SVE 谓词寄存器(predicate registers)简介 ARMv9的Scalable Vector Extension (SVE) 引入了谓词寄存器(Predicate Register…

Vitis HLS 学习笔记--函数例化(Function Instantiation)

目录 1. 简介 2. 功能分析 3. 示例分析 3.1 不使用 FUNCTION_INSTANTIATE 3.2 使用 FUNCTION_INSTANTIATE 4. 总结 1. 简介 函数例化&#xff08;Function Instantiation&#xff09;是 Vitis HLS 中的一个高级优化技术。它允许开发者在保持函数层次结构的同时&#xff…

wsl2平台鸿蒙全仓docker编译环境快速创建方法

文章目录 1 文章适用范围&#xff1a;2 WSL环境安装3 镜像迁移非C盘4 Docker环境准备4.1 docker用户组和用户创建4.2 Docker环境配置4.2.1 Ubuntu下安装docker工具4.2.2 鸿蒙Docker环境安装4.2.3 鸿蒙全仓代码拉取编译 5 参考文献6 FAQ6.1 缺头文件xcrusor/xcursor.h6.2 缺头文…

多叉树的DFS深度优先遍历,回溯法的基础算法之一

一、前言 多叉树一般用于解决回溯问题。 想必大家都学过二叉树&#xff0c;以及二叉树的深度优先遍历和广度优先遍历&#xff0c;我们思考&#xff1a;能不能将二叉树的DFS转化为多叉树的DFS&#xff1f; 二、多叉树的结构 多叉树的本质&#xff0c;就是一棵普通的树&#x…

六、Nginx-正向代理和反向代理

目录 一、正向代理 1、参数详解 2、常用变量详解 3、配置示例 二、反向代理 三、 Nginx的安全控制 1、如何使用SSL对流量进行加密 2、nginx添加SSL的支持 3、 Nginx的SSL相关指令 &#xff08;1&#xff09;ssl &#xff08;2&#xff09;ssl_certificate &#xff0…

Tuxera NTFS与Paragon NTFS:两款NTFS驱动软件的深度对比 tuxera和paragon NTFS哪个好

在Mac上使用NTFS格式的磁盘&#xff0c;通常需要借助第三方的驱动软件。其中&#xff0c;Tuxera NTFS和Paragon NTFS是两款备受欢迎的选择。虽然它们的基本功能相似&#xff0c;但在细节和使用体验上却有所不同。本文将带你深入了解这两款软件的差异&#xff0c;帮助你做出更明…

【python】OpenCV—Segmentation

文章目录 cv2.kmeans牛刀小试 cv2.kmeans cv2.kmeans 是 OpenCV 库中用于执行 K-Means 聚类算法的函数。以下是根据参考文章整理的 cv2.kmeans 函数的中文文档&#xff1a; 一、函数功能 cv2.kmeans 用于执行 K-Means 聚类算法&#xff0c;将一组数据点划分到 K 个簇中&…

响应式高端网站模板源码图库素材 资源下载平台源码

源码介绍 亲测可用&#xff0c;可用于做娱乐网资源网&#xff0c;功能非常的齐全无任何加密也无任何后门&#xff01;响应式高端网站模板源码图库素材 资源下载平台源码&#xff08;可运营&#xff09; 页面很美观&#xff0c;堪比大型网站的美工&#xff0c;而且页面做的也很…

Python将字符串用特定字符分割并前面加序号

Python将字符串用特定字符分割并前面加序号 Python将字符串用特定字符分割并前面加序号&#xff0c;今天项目中就遇到&#xff0c;看着不难&#xff0c;得花点时间搞出来急用啊&#xff0c;在网上找了一圈&#xff0c;没发现有完整流程的文章。所以就搞出来并写了这个文章。仅…

Mybatis 笔记 (一) V- 3.5.16

文章目录 Mybatis 笔记&#xff08;3.5.16&#xff09;1、基础数据2、基础依赖3、魔改点标记 A、试试SqlSessionFactoryB、建立连接的三种方式1、执行方法2、实现方式 C、“复杂”的 Configuration 模式实现1、直接构建Configuration2、补充environment 要素2.1、填充id2.2、填…

文生视频开源产品的一些调研(一)

笔者尝试AI视频生成的几个特点&#xff1a; 玄学prompt&#xff0c;每个视频的prompt可能也需要微调很多次&#xff0c;需要找到使用模型的最佳prompt词组合&#xff0c;不恰当的比喻&#xff0c;骑自行车&#xff0c;座位高度等都是人与车彼此熟悉玄学生成&#xff0c;因为需…

Java | Leetcode Java题解之第162题寻找峰值

题目&#xff1a; 题解&#xff1a; class Solution {public int findPeakElement(int[] nums) {int n nums.length;int left 0, right n - 1, ans -1;while (left < right) {int mid (left right) / 2;if (compare(nums, mid - 1, mid) < 0 && compare(n…

vue:对三种获取更新后的dom的方式进行分析

一、问题分析 由于vue的异步更新机制&#xff0c;我们在同步代码中是无法获取到更新后的dom的信息的 针对这个问题&#xff0c;我们有三种解决方案获取更新后的dom: 1.nextTick() 2.setTimeout() 3.在微任务中获取 因为更新是在同步任务结束后&#xff0c;执行微任务之前…

【网络安全】网络安全威胁及途径

1、网络安全威胁的种类及途径 &#xff08;1&#xff09;网络安全威胁的主要类型 网络安全面临的威胁和隐患种类繁多&#xff0c;主要包括人为因素、网络系统及数据资源和运行环境等影响。网络安全威胁主要表现为&#xff1a;黑客入侵、非授权访问、窃听、假冒合法用户、病毒…