【Linux】进程等待进程程序替换

进程等待&进程程序替换

  • 进程等待
  • 进程程序替换
  • 通过进程等待和进程程序替换来理解守护进程

进程等待

僵尸进程的产生原因是:子进程先于父进程退出,在子进程退出时会给父进程发送SIGCHILD信号,而父进程接收到这个信号后选择不处理,从而导致子进程的退出状态信息没有被接收,从而导致子进程成为僵尸进程。

那么正是由于这个原因,我们就需要进行进程等待,来回收子进程的退出状态信息,防止子进程成为僵尸进程。
wait函数就可以实现这个功能

pid_t wait(int* status);

这个函数是一个出参类型的函数,需要我们传入status地址,让wait帮我们将其内部的值进行设置,从而保存退出状态信息
在这里插入图片描述

实际上,status只用了后两个字节,也就是低位的两个字节来保存退出状态信息。
这个函数是一个阻塞类型的函数,也就是说,当wait函数没有接收到子进程退出的退出状态信息,那么程序会一直停到这行代码,直到等到接收到了退出状态信息,才会继续向下执行。

使用status得到退出状态信息的方法,按位与。
在这里插入图片描述
当子进程正常退出,如果传递了status的地址,会得到子进程的退出码
当子进程非正常退出,如果传递了status的地址,会得到子进程的core dump标志位和退出信号。

注意:coredump标志位表示的是子进程如果异常退出了,coredump值为1,表示产生了核心转储文件,0表示没有产生,是否产生核心转储文件不是单纯取决于进程异常退出,而是取决于。

例如当前的代码,子进程会异常退出,但是没有产生coredump文件。
在这里插入图片描述
在这里插入图片描述
可以看到coredump值为0,没有产生核心转储文件,使用ulimit -c查看当前coredump的大小,可以看到大小为0,意味着即使产生了,其大小也为0,所以coredump标志位的值为0。
在这里插入图片描述
通过ulimit -c unlimited将大小设为无限
在这里插入图片描述
这样就可以产生核心转储文件了。

除了使用wait函数之外,也可以使用waitpid来进行进程等待

pid_t waitpid(pid_t pid, int* status, int options);
pidstatusoptions
-1:等待任一子进程子进程的退出状态信息WNOHANG:设置为非阻塞,子进程未结束返回0,结束范围进程pid
0:等待指定pid的进程

需要注意的是:对于非阻塞类型的函数,需要搭配循环来使用

进程程序替换

对于一个bash进程,我们可以通过命令来运行自己的代码,bash进程是当前运行进程的父进程,通过进程概念的理解,我们自己的进程是拷贝了bash的代码的,那么为什么我们的进程不会运行bash进程呢?

原因就是进行了进程程序替换。

通过exec函数簇进行进程程序替换。

其中包含

//path需要带路径,arg第一个参数为可执行程序本身,多个参数用”,“隔开,结尾用NULL,
//若调用成功,则运行替换后的程序,调用失败返回-1
int execl(const char* path, const char* arg,...);
//与上述相同,path不用带路径
int execlp(const char* file, const char* arg,...);
//与上述相同,但是需要自己组织环境变量
int execle(const char* path, const char* arg,..., char* const envp[]);
//与execl相似,但是传递的命令行参数是以数组指针的方式
int execv(const char* path, char* const argv[]);
//与execlp相似,但是传递的命令行参数是以指针数组的方式
int execvp(const char* fail, char* const argv[]);
//与execlp相似,但是传递的命令行参数是以指针数组的方式
int execve(const char* path, char* const argv[], char* const envp[]);

总结起来就是:观察函数尾部带的符号来判断需要传递的参数是什么方式

函数名中带l的函数名中带v的函数名中带p的函数名中带e的
表示传递的参数为可变参数列表表示传递的参数是以数组指针的方式可以使用PATH,无需写全路径需要程序员自己设定环境变量

值得注意的是,除了execve之外,其他的exec函数都是库函数

这里使用execl演示
在这里插入图片描述

运行后的结果

在这里插入图片描述

通过进程等待和进程程序替换来理解守护进程

当某个进程运行的时候,我们需要进程进行守护

创建一个守护进程,让守护进程和被守护的进程进行进程间通信(可以选择共享内存或者消息队列),让被守护的进程每秒发送一个时间,让守护进行读,当守护进程发现前一秒的时间和当前时间相等时,意味着被守护的进程出现了问题,那么就kill掉这个进程,由守护进程创建出一个子进程,使用进程程序替换的方式将当前的子进程替换为要守护的进程,从而实现进程的守护。

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

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

相关文章

2023年MathorCup数学建模赛题浅析

MathorCup俗称妈杯,是除了美赛国赛外参赛人数首屈一指的比赛,而我们的妈杯今天也如期开赛。今年的妈杯难度,至少在我看来应该是2023年截至目前来讲最难的一场比赛。问题的设置、背景的选取等各个方面都吐露着我要难死你们的想法。难度是恒定的…

世纪末的星期

题目 1、世纪末的星期 曾有邪教称1999年12月31日是世界末日。当然该谣言已经不攻自破。 还有人称今后的某个世纪末的12月31日,如果是星期一则会… 有趣的是,任何一个世纪末的年份的12月31日都不可能是星期一!! 于是,“谣言制造商”又修改为星…

cuda ptx 汇编语言示例:读寄存器

编译 , Ampere 显卡,rtx 3060 3070... nvcc -archsm_86 -o hello hello_ptx.cu 或写成Makefile: hello: hello_sm_id.cunvcc -archsm_86 -o $ $^ #nvcc -archsm_86 -o hello hello_sm_id.cu $ 是指目标 $^ 是指第一个依赖 ^^ hello_ptx.cu #…

WinHex安装与使用

目录 下载WinHex 安装WinHex 查看现成的磁盘文件 手动创建磁盘文件 创建磁盘文件 创建分区 安装引导程序 查看磁盘 下载WinHex 下载链接: WinHex: Hex Editor & Disk Editor, Computer Forensics & Data Recovery Software 安装WinHex 1).下载完…

商贸批发进销存管理软件,仓库条码管理,库存管理。采购入库单,供应商档案管理。

公司发生采购业务,就需要对【供应商】档案进行管理。【供应商】档案包括:编号,名称,地址,电话,负责人,等信息。建立好【供应商】档案电脑存档,方便随时查阅,和统计分析。…

MySQL:安装 MySQL、Navicat、使用 Navicat 连接 MySQL

文章目录Day 01:一、概念1. 数据库 DB2. 数据库管理系统 DBMS3. MySQL二、安装 MySQL三、安装 Navicat Premium 16四、使用 Navicat 连接 MySQL注意:Day 01: 一、概念 1. 数据库 DB 数据库:DB (Database) 数据仓库,…

重磅!阿里版本【ChatGPT】开放测评!

前两天突然爆出惊人消息:阿里版ChatGPT开放测评了! 在本月初,已经有诸多关于阿里巴巴即将推出类似ChatGPT产品的传闻。 数日前,首批曝光的天猫精灵“鸟鸟分鸟”脱口秀版GPT基于大型模型的“精简版”,凭借其出色的表现吸…

快看这些wireshark 命令,必须得会!

wireshark捕获命令 捕获器表达式语法: 限定词三类 Type:host、net、prot 指出其后数字或名字的意义(主机,网段,端口) Direction:src、dst 指出传输方向 (源 、目的) …

最全Linux环境开发——shell编程

Linux下shell编程 一、什么是shell shell是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。 shell 本质上是 linux 命令,一条一条命令组合在一起,实现某一个目的&#xff…

Golang每日一练(leetDay0033) 二叉树专题(2)

目录 97. 交错字符串 Interleaving String 🌟🌟 98. 验证二叉搜索树 Validate Binary Search Tree 🌟🌟 99. 恢复二叉搜索树 Recover Binary Search Tree 🌟🌟 🌟 每日一练刷题专栏 &am…

DFIG控制6-c:数字控制延时的分析和补偿

DFIG控制6-c:数字控制延时的分析和补偿 本文基于教程的第6部分。 DFIM Tutorial 6 - Dynamic Analysis of Current Loops in a Wind Turbine based on DFIG 教程提到了这本书: S.-K. Sul, Control of Electric Machine Drive Systems. John Wiley &…

好用的待办事项APP有哪些

你是否有这样的感受,这就是随着生活和工作节奏的加快,自己经常会面临各种各样的待办事项需要去完成,例如会议安排、每天的工作计划、学习任务等等。但是我们的大脑记忆是有限的,难免会出现忘记待办事项的情况,为了更好…

外包干了三年,算是废了...

先说一下自己的情况。大专生,19年通过校招进入湖南某软件公司,干了接近3年的测试,今年年上旬,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了三年&#xff0c…

detr训练自己的数据集

参考链接: https://zhuanlan.zhihu.com/p/490042821?utm_id0 transform结构: 原理:https://blog.csdn.net/weixin_44649780/article/details/126808881?spm1001.2014.3001.5501 图2: DETR使用一个传统的CNN主干来学习一个输入…

Densely Connected Pyramid Dehazing Network

Abstract 提出了一种新的端到端的单幅图像去雾方法,称为稠密连接金字塔去雾网络(DCPDN),该方法可以联合学习透射图、大气光照和去雾。通过将大气散射模型直接嵌入到网络中,实现了端到端的学习,从而保证了所…

【使用教程】CANopen一体化伺服电机在汇川H5U PLC上的应用(上)

本文内容主要介绍了立迈胜一体化低压伺服CANopen通信的电机在汇川H5UPLC上的使用,本篇主要讲解环境的搭建以及软件自带的调试功能使电机运动起来。 一、系统构成 本系统主要构成是笔记本电脑、汇川PLC(H5U-1614MTD-A8)、PMM60系列一体化伺服电机(PMM6040B-CANopen)…

Maxon One 春季版本更新动态

2023年3月29日,Maxon,为剪辑师、电影制作人、动态设计师、视觉特效艺术家和各类创作者提供专业软件解决方案的开发商,今天宣布对Maxon One进行全面更新。 Maxon的2023年春季版本在整个产品系列中提供了令人振奋的新功能和工作流程改进&#x…

创略科技联合创始人兼总裁杨辰韵:AIGC、隐私计算赋能数字营销的本质是“以客户为中心”丨数据猿专访...

‍数据智能产业创新服务媒体——聚焦数智 改变商业MarTech概念现身已超十年,伴随着企业数字化转型的大背景,中国MarTech市场也迎来了高速发展。据《2022年中国MarTech市场洞察报告》数据显示,2017-2021年,中国 MarTech产业规模从…

windows服务器自带IIS搭建网站并发布公网访问【内网穿透】

文章目录1.前言2.Windows网页设置2.1 Windows IIS功能设置2.2 IIS网页访问测试3. Cpolar内网穿透3.1 下载安装Cpolar3.2 Cpolar云端设置3.3 Cpolar本地设置4.公网访问测试5.结语转载自远程源码文章:【IIS搭建网站】本地电脑做服务器搭建web站点并公网访问「内网穿透…

普通人是否能从ChatGPT中分一杯羹?

ChatGPT3.0刚刚推出,最开始的时候,人们只是将ChatGPT看作一个很会聊天的机器人,无论问题多么天马行空,它的答案看上去都有理有据。后来,像打开潘多拉魔盒一样,很多人开始拿它编大纲、撰写文案、编代码、创作…