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

Linux进程等待

一、进程等待是什么?

通过系统调用wait/waitpid,来对子进程进行状态检验与回收的工作。

二、为什么要有进程等待

1、子进程退出,父进程如果不管不顾,就可能造成‘僵尸进程’的问题,进而造成内存泄漏
另外,进程一旦变成僵尸状态,就无法被杀死,kill-9也不行,因为谁也没有办法杀死一个已经死去的进程。 (必须解决的)
2、子进程运行完成,结果对还是不对,或者是否正常退出。
通过进程等待,获取子进程退出情况--验证给子进程的任务完成的如何。 (可选项,有时不一定关心完成的如何)
父进程通过进程等待的方式,回收子进程资源,获取子进程退出信息。

三、wait/waitpid

1、函数参数/返回值介绍

阻塞等待(如服务器模式)

只要没有子进程退出,父进程就会在wait()处一直等待,不返回,默认为阻塞等待状态

阻塞状态:scanf是等待硬件资源

wait不返回时相当于等待软件资源

2、父进程wait1个子进程的样例

注:wait是等待任意一个子进程退出。

3、循环wait来wait多个子进程

四、利用waitpid获取子进程退出信息

1、输出型参数status

要获取的信息有好几部分,因此status的32位被分为几部分使用。

异常退出:

[0,6]位 共有2^6 == 64个信号 表示异常终止,本质是进程收到了某个信号 7表示core dump

例如:段错误,除0错误。

正常退出:

[8,15]表示退出状态,即exit对应的退出码

通过位运算&和>>得到退出信号和退出码

2、底层原理:

子进程退出后释放代码和数据,但保留task_struct,用来给上层返回退出信息

3、宏(宏函数,带()类似函数)

WIFEXITED--> Wait  if  exited  查看子进程是否正常退出

WEXITSTATUS--> 子进程退出状态  即退出码

4、options等待方式

options == 0 阻塞等待方式

options == WNOHANG(wait no....)

非阻塞轮询:非阻塞+循环  

查询不成功就返回,然后继续循环查询直到成功。

两次查询之间的时间可以做自己的事情。

相关文章:

  • Java集成腾讯云OCR身份证识别接口
  • 10000字!图解机器学习特征工程
  • 基于Java的婚纱摄影网站系统设计与实现(源码+lw+部署文档+讲解等)
  • XHSELL连接虚拟机的常见问题(持续更新)
  • 蓝桥杯 Java 括号序列
  • 【MATLAB源码-第56期】基于WOA白鲸优化算法和PSO粒子群优化算法的三维路径规划对比。
  • 搞懂 MySql 的架构和执行流程
  • Linux常用命令——chown命令
  • 用于读取验证码的 OCR 模型
  • debian 10 安装apache2 zabbix
  • Spring Boot发送邮件
  • Unity的碰撞检测(五)
  • 【黑马程序员】mysql进阶再进阶篇笔记
  • 2023年上半年上午易错题(软件设计师考试)
  • 了解神经网络
  • PHP聊天系统源码 在线聊天系统网站源码 后台自适应PC与移动端
  • 水声功率放大器的应用场景是什么
  • sql-50练习题0-5
  • 图神经网络及其在知识图谱的应用
  • C语言实现通讯录
  • 言短意长|今年五一假期的一个新变化
  • 香港发生车祸致22人受伤,4人伤势严重
  • 美国季度GDP时隔三年再现负增长,特朗普政府关税政策对美国经济负面影响或将持续
  • 李公明︱一周书记:数字文化的乌托邦精神与……算法时代的生存指南
  • 中国强镇密码丨洪泽湖畔的蒋坝,如何打破古镇刻板印象
  • “80后”杨占旭已任辽宁阜新市副市长,曾任辽宁石油化工大学副校长