【lesson14】进程控制之进程等待

文章目录

  • 为什么要有进程等待?
  • 如何等待和什么是等待?

为什么要有进程等待?

1.子进程退出,父进程不管子进程,子进程就要处于僵尸状态------会导致内存泄漏

2.父进程创建子进程是要让子进程办事的,那么子进程把任务完成的怎么样?
子进程做任务的结果:
a.代码跑完,结果正确
b.代码跑完,结果不正确
c.代码没跑完,程序崩溃

父进程需要关心吗?如果需要如何得知?如果不需要该怎么处理?
以上就是为什么要进程等待的结果。

总结进程等待的必要性:

  1. 之前讲过,子进程退出,父进程如果不管不顾,就可能造成‘僵尸进程’的问题,进而造成内存泄漏。
  2. 另外,进程一旦变成僵尸状态,那就刀枪不入,“杀人不眨眼”的kill -9 也无能为力,因为谁也没有办法杀死一个已经死去的进程。
  3. 最后,父进程派给子进程的任务完成的如何,我们需要知道。如,子进程运行完成,结果对还是不对,或者是否正常退出。
  4. 父进程通过进程等待的方式,回收子进程资源,获取子进程退出信息

如何等待和什么是等待?

进程等待方法:
wait:基本验证回收僵尸进程的问题
waitpid:获取子进程退出结果的问题
代码演示:
僵尸进程问题:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
解决僵尸进程问题:
在这里插入图片描述
在这里插入图片描述
用wait函数解决:
在这里插入图片描述
wait函数是阻塞式等待
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们可以看到僵尸进程确实得到了回收。
为了能更好的看清我们对代码进行改进:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这回我们可以清楚的看到子进程先是S态然后是Z态最后被回收。

用waitpid解决:
在这里插入图片描述
我们可以看到waitpid有三个参数。
pid:要等待进程的pid,如果传入的是-1表示等待任一个进程
status:输出型参数
options:如果传入0为阻塞式等待

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面讲了status是输出型参数那么具体是干什么的呢?
status:可以获取子进程退出结果。
但是status并不是按照整数来整体使用的,而是按照比特位,将32个比特位进行划分,我们只学习第16位。
在这里插入图片描述
status次低8位为退出状态码:
演示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们可以看到退出码为0;
那么我们改一下看一下,改成10.
在这里插入图片描述
在这里插入图片描述
我们看到确实退出码为10.
status:低7位为退出信号
演示:
在这里插入图片描述
在原先的基础上多输出一个退出信号。
在这里插入图片描述
正常退出信号为0;
异常退出测试:
我们手动杀死子进程
在这里插入图片描述

在这里插入图片描述
我们可以看到退出信号为9

程序异常退出或者崩溃,本质是OS杀掉了该进程。
操作系统如何杀掉呢?
本质是OS发送信号杀掉的。

所以程序异常不光光是内部代码有问题,也可能是外力直接杀掉。

父进程通过wait/waitpid可以拿到子进程的退出结果,那么为什么要用wait和waitpid呢?直接用全局变量不行吗?
不行,因为进程具有独立性,那么当数据发生改变是就会发生写时拷贝,父进程无法拿到子进程全局变量的地址。

既然进程具有独立性,进程退出码不也是子进程的数据吗?父进程又凭什么拿到呢?wait和waitpid究竟干了什么呢?

僵尸进程:至少要保留该进程的PCB信息!task_struct里面保留了任何进程退出时的退出信息结果。

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

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

相关文章

【Tensorflow 2.12 简单智能商城商品推荐系统搭建】

Tensorflow 2.12 简单智能商城商品推荐系统搭建 前言架构数据召回排序部署调用结尾 前言 基于 Tensorflow 2.12 搭建一个简单的智能商城商品推荐系统demo~ 主要包含6个部分,首先是简单介绍系统架构,接着是训练数据收集、处理,然后是召回模型、…

“深入探讨Java JUC中的ReentrantLock锁:实现多线程同步与并发控制“

简介 1、从Java5开始,Java提供了一种功能更强大的线程同步机制——通过显式定义同步锁对象来实现同步,在这种机制下,同步锁由Lock对象充当。 2、Lock 提供了比synchronized方法和synchronized代码块更广泛的锁定操作,Lock允许实…

arcgis js api FeatureLayer加载时返回数据带*问题

接着这一问题衍生出来的问题 arcgis的MapServer服务查询出来的结果geometry坐标点带*的问题-CSDN博客 个人感觉像是server版本的问题,具体不清楚,pg数据库里面的shape点集合坐标点的精度是8,但是server服务查出来的默认都十几位。所以存在一…

使用CPR库和Python编写程序

以下是一个使用CPR库和Python编写的爬虫程序,用于爬取。此程序使用了proxy的代码。 import requests from cpr import CPR ​ def get_proxy():url "https://www.duoip.cn/get_proxy"headers {"User-Agent": "Mozilla/5.0 (Windows NT …

如何用.bat文件直接安装jar包

大家应该都知道一个maven引入jar包,如果直接把jar包放到目录,这样是没用的,引入还是会失败 这里我们可以创建一个.bat的windows系统文件,写入pom.xml对应的groupid,artifactId,version pom.xml中进入jar包…

RDB.js:适用于 Node.js 和 Typescript 的终极对象关系映射器

RDB.js 是适用于 Node.js 和 Typescript 的终极对象关系映射器,可与 Postgres、MS SQL、MySQL、Sybase SAP 和 SQLite 等流行数据库无缝集成。无论您是使用 TypeScript 还是 JavaScript(包括 CommonJS 和 ECMAScript)构建应用程序&#xff0c…

Ceres 使用笔记

文章目录 Part.I IntroductionChap.I 预备知识Chap.II 概念理解 Part.II 简单使用Chap.I Ceres 中主要函数简介Chap.II 一个简单的实例 Reference Part.I Introduction Ceres 1 是由 Google 开发的开源 C 通用非线性优化库,与 g2o 并列为目前视觉 SLAM 中应用最广泛…

springboot+vue开发的视频弹幕网站动漫网站

springbootvue开发的视频弹幕网站动漫网站 演示视频 https://www.bilibili.com/video/BV1MC4y137Qk/?share_sourcecopy_web&vd_source11344bb73ef9b33550b8202d07ae139b 功能: 前台: 首页(猜你喜欢视频推荐)、轮播图、分类…

28、Flink 的SQL之DROP 、ALTER 、INSERT 、ANALYZE 语句

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

cookie过大导致request 400 错误研究

问:get请求太长报400的错误,如何解决?生成系统中经常偶现此问题 问:get请求URL的长度是谁限制的? 问:每一个cookie的value的大小还是同域下cookie的个数做的限制? 现象:出现 400 Ba…

【Python · PyTorch】数据基础

数据基础 1. 数据操作1.1 入门1.2 运算符1.3 广播机制1.4 索引和切片1.5 节省内存1.6 转化为其他Python对象 2. 数据预处理2.1 读取数据集2.2 处理缺失值2.3 转换为张量格式 本文介绍了PyTorch数据基础,Python版本3.9.0,代码于Jupyter Lab中运行&#xf…

人工智能之深度学习

1. 引言 时至今日,人们常用的计算机程序几乎都是软件开发人员从零编写的。 比如,现在开发人员要编写一个程序来管理网上商城。 经过思考,开发人员可能提出如下一个解决方案: 首先,用户通过Web浏览器(或移动…

Elasticsearch的聚集统计,可以进行各种统计分析

说明: Elasticsearch不仅是一个大数据搜索引擎,也是一个大数据分析引擎。它的聚集(aggregation)统计的REST端点可用于实现与统计分析有关的功能。Elasticsearch提供的聚集分为三大类。 度量聚集(Metric aggregation):度量聚集可以用于计算搜…

MyBatisPlus的使用【详细】

目录 Mybatis MybatisPlus特性 MybatisPlus的使用 常见注解 TableName TableId TableField MP常见配置 条件查询器Wrapper QueryWrapper UpdateWrapper LambdaQueryWrapper 自定义SQL Service接口 批量添加数据 MP的代码生成 MP静态工具 MP扩展功能之逻辑删除…

C++栈、队列、优先级队列模拟+仿函数

目录 一、栈的模拟和deque容器 1.deque 1.1deque结构 1.2deque优缺点 2.stack模拟 二、队列的模拟 三、priority_queue优先级队列 1.优先级队列模拟 2.添加仿函数 一、栈的模拟和deque容器 在之前,我们学过了C语言版本的栈,可以看这篇文章 栈和…

【刷题篇】笔试真题

文章目录 复数乘法一年中的第几天字符串相加字符串相乘 复数乘法 复数 可以用字符串表示,遵循 “实部虚部i” 的形式,并满足下述条件: 实部 是一个整数,取值范围是 [-100, 100] 虚部 也是一个整数,取值范围是 [-100, 1…

MySQL字段加密方案 安当加密

要通过安当KSP密钥管理系统实现MySQL数据库字段的加密,您可以按照以下步骤进行操作: 安装和配置安当KSP密钥管理系统:首先,您需要安装安当KSP密钥管理系统,并按照说明进行配置。确保您已经正确地设置了密钥管理系统的用…

C语言知识回顾

链接:https://pan.baidu.com/s/1CiB1Ydm4LTV6hZE8wx0VFw?pwdna4z 提取码:na4z --来自百度网盘超级会员V6的分享

判断过/欠拟合和学习率

一、说明 这篇博客是判断是否过拟合和学习率大小的问题,并没有给出解决办法。因为每个人的网络模型不一样,解决办法也不同。因此,如果需要解决办法的话,请参考其他博客。 二、拟合问题 1.train_loss 不断下降,test_los…

【Linux系统编程:信号】产生信号 | 阻塞信号 | 处理信号 | 可重入函数

写在前面 通过学习信号可以理解进程与进程的一个相对关系,还能理解操作系统与进程的关系。要注意的是进程间通信中的信号量与这里的信号没有半毛钱关系,就像老婆和老婆饼。 本文要点: 掌握 Linux 信号的基本概念掌握信号产生的一般方式理解…