Linux|僵死进程
1.僵死进程产生的原因或者条件:
什么是僵死进程?
当子进程先于父进程结束,父进程没有获取子进程的退出码,此时子进程变成僵死进程.
简而言之,就是子进程先结束,并且父进程没有获取它的退出码;
那么僵死进程产生的原因或者条件就是:子进程先于父进程结束,并且父进程没有获取子进程的退出码;
2.进程结束的过程以及僵死进程产生的过程:

3.观察僵死进程:
父进程执行7次,子进程改为3次;就能观察到僵死进程(放到后台运行&,ps -f);
#include <stdio.h>
#include <unistd.h>
#include <assert.h>
#include <stdlib.h>int main()
{char *s=NULL;int n=0;//控制父子进程执行的次数;pid_t id=fork();assert(id!=-1);if(id==0)//子进程{s="child";n=3;}else//父进程{s="parent";n=7;}//父子进程int i=0;for(;i<n;i++){printf("s=%s\n",s);sleep(1);}exit(0);
}

4.处理僵死进程
(1)父进程先结束(子进程会变成孤儿进程,孤儿进程会被收养(红帽子是init(pid==1)收养孤儿进程,Unbuntu是操作系统指定了一个进程));
(2)父进程调用wait()方法获取子进程的退出码;
本质:都是调用了wait方法;
代码演示:
方法一:父进程先结束//就是把父进程的n=3,子进程的n=7即可;
方法二:显示的调用wait:
else
{s="parent";n=7;int val=0;wait(&val);printf("val=%d\n",val);
}
但是两种方法都有区别:就是父进程调用wait会阻塞,等子进程执行完之后,父进程才会去执行;

5.处理僵死进程的意义;
僵死进程的坏处:白白消耗内存;(讲服务器代码的时候会演示)
Linux内核设计与实现27页;


6.退出码
改代码:exit(3);
执行显示val=768;
man 2 wait

WIFEXITED:正常退出的状态;
WEXITSTATUS:获取退出码;
else//父进程{ s="parent";n=7;int val=0;wait(&val);if(WIFEXITED(val)){printf("val=%d\n",WEXITSTATUS(val));}}
将退出码设为exit(3),未使用WIFEXITED(),WEXITSTATUS()之前。结果如下:

使用WIFEXITED(),WEXITSTATUS()。结果如下:

7.避免僵死进程的方法总结
1)父进程先结束;
2)父进程调用wait()方法获取子进程的退出码;
其实两种处理僵死进程的方法本质都是一样的,都调用了wait获取子进程退出码(方法一是父进程先结束后子进程被Init(现在随着内核的发展不一定是1)收养,Init之后调用wait获取子进程退出码;方法二是父进程直接调用wait,)但是两种方法又有区别,就是父进程调用wait会阻塞,等子进程执行完之后,父进程才会执行.
若想父进程调用wait不阻塞,那么我们需要结合信号一起.具体在信号那一节用代码演示;
相关文章:
Linux|僵死进程
1.僵死进程产生的原因或者条件: 什么是僵死进程? 当子进程先于父进程结束,父进程没有获取子进程的退出码,此时子进程变成僵死进程. 简而言之,就是子进程先结束,并且父进程没有获取它的退出码; 那么僵死进程产生的原因或者条件就是:子进程先于父进程结束,并且父进程没有获取…...
JDY蓝牙注意事项
波特率设置:9600,不接受115200,或者38400. 不同于WiFi测试,jdy蓝牙不接受AT"指令,可以使用“ATVERSION"指令测试 安信可公司的那个蓝牙指令在这里没有用,不知道是不是生产的公司不一样...
服务器IPMI管理操作
简介:智能平台管理界面(IPMI,Intelligent Platform Management Interface)是管理基于 Intel 结构的企业系统中所使用的外围设备采用的一种工业标准,用户可以利用IPMI监视服务器的物理健康特征,如温度、电压、风扇工作状…...
自动驾驶学习笔记(九)——车辆控制
#Apollo开发者# 学习课程的传送门如下,当您也准备学习自动驾驶时,可以和我一同前往: 《自动驾驶新人之旅》免费课程—> 传送门 《Apollo Beta宣讲和线下沙龙》免费报名—>传送门 文章目录 前言 控制器设计 比例积分微分控制 线性…...
HTML5学习系列之项目实战1
HTML5学习系列之项目实战1 前言代码记录问题总结 前言 学习记录 代码 <div id"player"><audio id"musicbox"></audio><div id"controls" class"clearfix controls"><div id"play" class"…...
git 提交成了LFS格式,如何恢复
平常习惯使用sourceTree提交代码,某次打开时弹出了一个【是否要使用LFS提交】的确认弹窗,当时不知道LFS是什么就点了确认,后续提交时代码全变成了这个样子 因为是初始化的项目首次提交,将近四百个文件全被格式化成了这个样子&…...
【ISP图像处理】Demosaic去马赛克概念介绍以及相关方法整理
1. 基本定义 使用彩色滤光器阵列(CFA)的数码相机需要一个去马赛克程序来形成完整的RGB图像。一般的相机传感器都是采用彩色滤光片阵列(CFA)放置在光感测单元上,在每个像素处仅捕获三种原色成分中的一种。 去马赛克方法主要关注于复原非常规区域,比如边缘…...
单图像3D重建AI算法综述【2023】
计算机视觉是人工智能的一个快速发展的领域,特别是在 3D 领域。 本概述将考虑一个应用任务:2D 和 3D 环境之间的转换。 在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编…...
three.js相机调用reset方法复原但无法完全复原
目录 一、问题 二、原因 三、总结 一、问题 需求:经过多次旋转、平移等变换后,希望恢复到初次渲染的角度、位置。结果发现: three.js oribtControls调用 一次reset方法 无法完全复原;需要多次调用后才能复原。 this.orbitControls.reset…...
前端为什么要工程化
前端为什么要工程化 文章目录 前端为什么要工程化传统开发的弊端一个常见的案例更多问题 工程化带来的优势开发层面的优势团队协作的优势统一的项目结构统一的代码风格可复用的模块和组件代码健壮性有保障团队开发效率高 求职竞争上的优势 现在前端的工作与以前的前端开发已经完…...
软件测试/测试开发/人工智能丨视觉与图像识别自动化测试
视觉与图像识别在软件自动化测试领域中的应用是越来越重要的一项技术,它使得测试可以更全面、准确地模拟用户对图形用户界面(GUI)的交互。以下是视觉与图像识别在软件自动化测试中的主要应用: 1. 自动化 GUI 测试 视觉与图像识别…...
nvm的下载与使用
1.如果已经安装nodejs , 先卸载nodejs; 从控制面板中 卸载程序 卸载nodejs win r打开cmd ,管理员运行 where node 查看是否删除干净nodejs 2.下载nvm 从github 下载nvm , 下载nvm 3.nvm 和node安装路径最好写在同一个路径下 ,如D盘 ,D\a\nvm , D\a\nodejs 4.…...
拼多多官方开放平台接口app商品详情接口获取实时商品详情数据演示
拼多多开放平台提供了一种名为“商品详情接口”的API接口,它允许卖家从自己的系统中快速获取商品信息,如商品标题、描述、价格、库存等,并将这些信息展示在自己的店铺中。通过该接口,卖家可以更好地管理自己的商品库存和销售&…...
STM32F4系列单片机GPIO概述和寄存器分析
第2章 STM32-GPIO口 2.1 GPIO口概述 通用输入/输出口 2.1.1 GPIO口作用 GPIO是单片机与外界进行数据交流的窗口。 2.1.2 STM32的GPIO口 在51单片机中,IO口,以数字进行分组(P0~P3),每一组里面又有8个IO口。 在ST…...
【LeetCode刷题】--9.回文数
9.回文数 class Solution {public boolean isPalindrome(int x) {if(x < 0){return false;}int tmp x, sum 0;boolean flag false;while(x ! 0){sum sum * 10 x % 10;x / 10;}if(sum tmp){flag true;}return flag;} }...
大数据-之LibrA数据库系统告警处理(ALM-12057 元数据未配置周期备份到第三方服务器的任务)
告警解释 系统安装完成后会检查元数据是否有周期备份到第三方服务器的任务,然后每1小时会检查一次。如果元数据未配置周期备份到第三方服务器的任务,将发送严重告警。 在用户创建元数据周期备份到第三方服务器的任务后,告警消除。 告警属性…...
毅速丨嫁接打印在模具制造中应用广泛
在模具行业中,3D打印随形水路已经被广泛认可,它可以提高冷却效率,从而提高产品良率。然而,全打印模具制造的成本相对较高,因为需要使用金属3D打印机和专用材料。为了节省打印成本,同时利用3D打印的优势&…...
『亚马逊云科技产品测评』活动征文|基于next.js搭建一个企业官网
『亚马逊云科技产品测评』活动征文|基于next.js搭建一个企业官网 授权声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 Developer Centre, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方…...
C# Winform围棋棋盘
C# Winform简单的围棋棋盘vs2008winform小游戏C#vs2010winform棋盘C#窗体小游戏 这是一个简单的围棋棋盘小游戏,使用C# Winform编写棋盘界面,玩家可以在空白的交叉点上下棋子 项目获取: 项目获取:typora: typora/img (gitee.co…...
vue使用本地图片设置为默认图
一、引用 import imgSrc /assets/common/image/xxx.png 二、赋值给变量 defaultImg:imgSrc, 三、将变量给img标签 <img :src"defaultImg:imgSrc" alt"icon"> 注意:这里直接使用路径给变量是无法实现的哟...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...
GraphQL 实战篇:Apollo Client 配置与缓存
GraphQL 实战篇:Apollo Client 配置与缓存 上一篇:GraphQL 入门篇:基础查询语法 依旧和上一篇的笔记一样,主实操,没啥过多的细节讲解,代码具体在: https://github.com/GoldenaArcher/graphql…...
