Linux进程控制(2)(进程程序替换1)

news2024/10/5 9:09:52

目录

续--上一章

1.WIFEXITED && WEXITSTATUS

2.非阻塞等待

进程程序替换

1.先观代码 && 现象

2.原理解释

3.将代码改成多进程版

4.使用所有的替换方法,并且认识函数参数的含义


续--上一章

1.WIFEXITED && WEXITSTATUS

若需要知道退出码的话,还需要对status进行相应的位操作,那那些不懂操作的人该怎么办呢?

第一个 WIFEXITED 返回真时,则代表子进程正常退出,这时的 WEXITSTATUS 返回的就是子进程的退出码:

等待是必须的,但获取子进程的退出信息不是必须的,有时候如果不需要,则int *status输入NULL即可

如果想知道退出信号,就拿位操作去做,一般来说,对于程序员来讲,你只需要关注最终任务完成没有,若是出异常了,那就需要调试了,调试的时候按照自己的动作来调就行了

2.非阻塞等待

如果子进程没有退出,而父进程在进行执行waitpid进行等待时,则会发生阻塞等待 -- 进程阻塞了

即在等待某种条件发生(子进程退出)

在这种阻塞时,父进程其他事情什么都没干

pid_ t waitpid(pid_t pid, int *status, int options);

当options的为 WNOHANG 时,将会进行非阻塞等待

非阻塞等待(本质就是循环检测子进程的状态)就是允许父进程做一些其他的事情

返回值ret

ret > 0 :等待成功了,子进程退出了,并且父进程回收成功

ret < 0 :等待失败了

ret == 0 :检测是成功的,只不过子进程还没退出,需要你下一次进行重复等待

非阻塞等待的时候 + 循环 = 非阻塞轮询

代码测试:

进程程序替换

1.先观代码 && 现象

代码:

现象:

让我们(进程)用exec*(exec系列)的函数,执行起来新的程序

2.原理解释

进程 =  内核数据结构 + 代码和数据

本质上是将当前进程的代码和数据进行替换的一种技术

进程的程序替换并没有创建新的进程!!(该过程并没有把PCB 页表 地址空间 ... 重建

站在被替换进程的角度:本质就是这个程序被加载到内存了!
怎么加载?exec* 类似于一种Linux上的加载函数

那么对于这个运行结果,为什么下面这条语句未被执行呢

exec*系列的函数,执行完毕之后,后续的代码不见了,因为被替换了


execl函数的返回值可以不关心了。只要替换成功,就不会向后继续运行,只要继续运行了,一定是替换失败了!

3.将代码改成多进程版

fork创建子进程,让子进程自己去替换

创建子进程,让子进程完成任务:

1. 让子进程执行父进程代码的一部分

2. 让子进程执行一个全新的程序

ls指令 在子进程中进行覆盖代码和数据时,也要进行写时拷贝(代码和数据都要)

既然exec* 可以替代系统指令,就也可以替换其他指令已经各种可执行程序

4.使用所有的替换方法,并且认识函数参数的含义

l:list . 列表

path:我们要执行的程序,需要带路径(即怎么找到这个程序,你得告诉我)

后面的参数:在命令行中怎么执行,你就怎么传参

命令行 : $ ls -a -l

execl("/usr/bin/ls", "ls", "-a", "-l", NULL);

参数必须以NULL结尾

V:vector(动态数组)

和execl类似,只不过是将后面的参数放入数组

P:用户可以不传要执行文件的路径(但是文件名要传),直接告诉exec*,我要执行谁就行

本质就是会在环境变量PATH中进行查找这个名字

e:environment 环境变量

testexec.c:

mypragma.c:

运行:

这就和以前的命令行参数表和环境变量表一样,在父进程中本身会存在这两张表(这里的两张表是我们自定义的),会传递给子进程

但是在父进程本身就会有一批环境变量,从bash来:

即最后一个参数的意义是整体替换所有的环境变量!

1.用全新的给子进程
2.用老的环境变量给子进程, environ

3.老的环境变量稍微修改,给子进程(putenv操作可以新增环境变量)

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

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

相关文章

ODX相关基础知识普及

一、ODX概述 1.1 背景与意义 介绍汽车电子化的发展 随着科技的飞速发展&#xff0c;汽车电子化已成为现代汽车工业的重要趋势。从早期的机械控制到现代的电子控制&#xff0c;汽车电子化经历了巨大的变革。早期&#xff0c;汽车的主要控制系统都是基于机械原理&#xff0c;通…

Cisco ACI Simulator 6.0(7e)M 发布下载,新增功能简介

Cisco ACI Simulator 6.0(7e)M - ACI 模拟器 Application Centric Infrastructure (ACI) Simulator Software 请访问原文链接&#xff1a;https://sysin.org/blog/cisco-acisim-6/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.…

[C/C++开发]链接动态库在不同操作系统上的行为

个人博客:Sekyoro的博客小屋 个人网站:Proanimer的个人网站 想必很多人已经了解了动态库与静态库,在实际开发中也经常使用. 但是,有必要了解在windows和Linux上开发c程序生成和链接动态库的不同行为,因为经常混淆或者自以为找到了动态库,这里简单学习并澄清一下.其中许多内容来…

【Python】pyenv:管理多版本 Python 环境的利器

pyenv 是一个强大的 Python 版本管理工具&#xff0c;它允许开发者在同一台计算机上轻松安装和管理多个 Python 版本。对于需要在不同项目中使用不同 Python 版本的开发者来说&#xff0c;pyenv 是一个非常有用的工具&#xff0c;因为它可以帮助用户在全局和项目级别控制 Pytho…

PCL 给点云添加高斯噪声并保存

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 添加高斯噪声实现 2.1.2 可视化函数 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实战案例汇总&#xff08;长期更新&…

角色动画——RootMotion全解

1. Unity(2022)的应用 由Animtor组件控制 在Animation Clip下可进行详细设置 ​ 官方文档的介绍(Animation选项卡 - Unity 手册) 上述动画类型在Rag选项卡中设置: Rig 选项卡上的设置定义了 Unity 如何将变形体映射到导入模型中的网格&#xff0c;以便能够将其动画化。 对于人…

污水排放口细粒度检测数据集,污-水排放口的类型包括10类目标,10000余张图像,yolo格式目标检测,9GB数据量。

污水排放口细粒度检测数据集&#xff0c;污-水排放口的类型包括10类目标&#xff08;1 合流下水道&#xff0c;2 雨水&#xff0c;3 工业废水&#xff0c;4 农业排水&#xff0c;5 牲畜养殖&#xff0c;6 水产养殖&#xff0c;7 地表径流&#xff0c;8 废水处理厂&…

yub‘s Algorithmic Adventures_Day5

Day5 反转链表 link&#xff1a;206. 反转链表 - 力扣&#xff08;LeetCode&#xff09; 思路分析 与数组不同&#xff0c;链表没必要定义新的链表进行存储【对内存空间的浪费】 直接改变next指针即可. 注意头节点指向的下一个节点为null 双指针法 class Solution {publi…

杂谈c语言——6.浮点数的存储

1.浮点数在内存中的存储 常⻅的浮点数&#xff1a;3.14159、1E10等&#xff0c;浮点数家族包括&#xff1a; float、double、long double 类型。 浮点数表⽰的范围&#xff1a; float.h 中定义 1.1 练习 #include<stdio.h>int main() {int n 9;float* pFloat (floa…

Golang | Leetcode Golang题解之第456题132模式

题目&#xff1a; 题解&#xff1a; func find132pattern(nums []int) bool {candidateI, candidateJ : []int{-nums[0]}, []int{-nums[0]}for _, v : range nums[1:] {idxI : sort.SearchInts(candidateI, 1-v)idxJ : sort.SearchInts(candidateJ, -v)if idxI < idxJ {ret…

智能视界·大模型驱动视频矩阵管理系统

开头先配两张ER图 一张不带字段&#xff0c;一张带字段&#xff0c;剩下的内容按需拿取 1.产品介绍 产品名称&#xff1a; 智能视界大模型驱动视频矩阵管理系统 主要功能&#xff1a; 智能视频分析与识别 功能介绍&#xff1a;该系统集成先进的人工智能大模型&#xff0c;能…

热轧钢带缺陷数据集,Xsteel表面缺陷数据集(X-SDD),其中包含七种典型的热轧带钢缺陷类型,共有1360个缺陷图像。

热轧钢带缺陷数据集&#xff0c;称为Xsteel表面缺陷数据集&#xff08;X-SDD&#xff09;&#xff0c;其中包含七种典型的热轧带钢缺陷类型&#xff0c;共有1360个缺陷图像。与常用的NEU表面缺陷数据库&#xff08;NEU-CLS&#xff09;的六种缺陷类型相比&#xff0c;X-SDD包含…

Ray_Tracing_The_Next_Week

1动态模糊 动态模糊在摄影中就是快门的速度慢&#xff0c;捕捉光的时间长&#xff0c;物体运动时进行捕捉成像&#xff0c;拍出来的结果是这个运动过程每一帧的平均值 我们的思路是&#xff1a; 每一条光线都拥有自己存在的一个时间点。随着时间变化随机生成光线,一般来说我…

全新芒果YOLOv10改进135:最新注意力机制EMA:即插即用,具有跨空间学习的高效多尺度注意力模块,ICCASSP 2023

💡本篇内容:芒果YOLOv10改进135:最新注意力机制EMA:即插即用,具有跨空间学习的高效多尺度注意力模块,ICCASSP 2023 **具有跨空间学习的高效多尺度注意力模块EMA | 即插即用 该模块通常包括多个并行的注意力子模块,每个子模块关注于输入数据的不同尺度或分辨率。这些子模块…

Study-Oracle-10-ORALCE19C-RAC集群维护

一路走来&#xff0c;所有遇到的人&#xff0c;帮助过我的、伤害过我的都是朋友&#xff0c;没有一个是敌人。 一、RAC的逻辑架构与进程 1、RAC 与单实例进程的对比 2、RAC相关进程功能 3、在主机查看RAC进程 其他的不列举了 4、RAC集群启停命令 检查集群状态 ORACLE 19C …

2-112基于matlab的协同干扰功率分配模型

基于matlab的协同干扰功率分配模型&#xff0c;带操作界面的功率分配GUI&#xff0c;可以实现对已有功率的分配优化&#xff0c;可以手动输入参数值。4个干扰山区分二批总干扰功率&#xff0c;每个扇区包括威胁总系数、综合压制概率、目标函数增量等。程序已调通&#xff0c;可…

无源有损耗导电介质的平面电磁波——复数介电常数带来复波数k(导致幅度衰减)和复波阻抗(带来磁场电场相位不同)

推导中以εμσ是实数为假设 注意在线性介质中J 0和σ等于0其实是一个条件&#xff0c;因为J σE 线性介质的麦克斯韦方程 线性介质无源无损耗条件下 线性介质无源有损耗导电介质下 无源有损耗的复数麦克斯韦方程组&#xff0c;只有方程二与无源无损耗的麦克斯韦方程组不同…

【Linux】使Ubuntu自适应窗口大小并与主机共享文件

LInux虚拟机版本ubuntu-20.04.6&#xff0c;VM版本VMware Workstation 17 Pro VMware Tools™ 是一组服务和模块&#xff0c;是VMware公司在其虚拟化平台中提供的一套工具集&#xff0c;旨在提高虚拟机的性能和稳定性。它们支持 VMware 产品中的多种功能特性&#xff0c;有助于…

TX-LCN框架 分布式事务

一、三种事务模式 1&#xff09;LCN 基于XA协议&#xff0c;事务提交或回滚的操作由事务管理服务器统一告诉它管理的多个项目&#xff0c;也就是说在A事务&#xff0c;B事务的事务提交操作或回滚操作都是在同一时刻发生&#xff0c;并且要么都提交&#xff0c;要么都回滚。 LCN…

.NET开源跨平台桌面和移动应用的统一框架 - Eto.Forms

前言 今天大姚给大家分享一个.NET开源、跨平台桌面和移动应用的统一框架&#xff1a;Eto.Forms。 项目介绍 Eto.Forms是一个.NET开源、跨平台的桌面和移动应用的统一框架&#xff0c;该框架允许开发者使用单一的UI代码库构建在多个平台上运行的应用程序&#xff0c;并利用各…