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不阻塞,那么我们需要结合信号一起.具体在信号那一节用代码演示;

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

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

相关文章

C#异常捕获try catch详细介绍

在C#中&#xff0c;异常处理是通过try、catch、finally和throw语句来实现的&#xff0c;它们提供了一种结构化和可预测的方法来处理运行时错误。 C#异常基本用法 try块 异常处理以try块开始&#xff0c;try块包含可能会引发异常的代码。如果在try块中的代码执行过程中发生了…

基于卡尔曼滤波实现行人目标跟踪

目录 1. 作者介绍2. 目标跟踪算法介绍2.1 目标跟踪背景2.2 目标跟踪任务分类2.3 目标跟踪遇到的问题2.4 目标跟踪方法 3. 卡尔曼滤波的目标跟踪算法介绍3.1 所用数据视频说明3.2 卡尔曼滤波3.3 单目标跟踪算法3.3.1 IOU匹配算法3.3.2 卡尔曼滤波的使用方法 3.4 多目标跟踪算法 …

rocketmq 安装dashboard1.0.0 mq消息控制台安装 rocketmq控制台安装 rocketmq-dashboard-1.0.0编译安装

1. 官网&#xff1a; 下载 | RocketMQ 2. dashboard安装包位置&#xff1a; 在连接最下面&#xff0c;点击download.zip即可 3. 需要安装maven, 编译命令&#xff1a; mvn clean install -U -Dmaven.test.skiptrue4. 启动jar: java -jar rocketmq-dashboard-1.0.0.jar &…

在线随机字符串生成工具

具体请前往&#xff1a;在线随机字符串生成器--通过该工具生成动态复杂随机密码,随机字符串等&#xff0c;加密盐等

Leetcode—141.环形链表【简单】

2023每日刷题&#xff08;三十三&#xff09; Leetcode—141.环形链表 快慢指针算法思想 关于快慢指针为什么能检测出环&#xff0c;可以这么思考。 假设存在一个环: 慢指针进入环后&#xff0c;快指针和慢指针之间相距为d&#xff0c;每一次移动&#xff0c;d都会缩小1&…

【项目设计】网络版五子棋游戏

文章目录 一、项目介绍1. 项目简介2. 开发环境3. 核心技术4. 开发阶段 二、环境搭建1. 安装 wget 工具2. 更换 yum 源3. 安装 lrzsz 传输工具4. 安装⾼版本 gcc/g 编译器5. 安装 gdb 调试器6. 安装分布式版本控制工具 git7. 安装 cmake8. 安装 boost 库9. 安装 Jsoncpp 库10. 安…

iOS线程

1.任务、线程、队列 每一个要执行的操作都是任务&#xff1a;比如说函数 一个队列中可以放很多个线程&#xff0c;一个线程中有很多个任务 可以这样看&#xff1a;有一个办事所&#xff08;队列&#xff09;&#xff0c;所里有很多窗口&#xff08;线程&#xff09;&#xff0c…

DM8共享集群DSC初始化DB实例报错

DM8共享集群DSC初始化DB实例报错 问题描述 启动dmcss和dmasmsvr服务启动后&#xff0c;初始化DB实例提示如下报错&#xff1a; [dmdbalocalhost DSC0]$ /dmdb8/dmdbms/bin/dminit control/dmdb8/dmdbms/dsc_config/DSC0/dminit.ini initdb V8 db version: 0x7000c file dm.k…

[AI]ChatGPT4 与 ChatGPT3.5 区别有多大

ChatGPT 3.5 注册已经不需要手机了&#xff0c;直接邮箱认证就可以&#xff0c;这可真算是好消息&#xff0c;坏消息是 ChatGPT 4 还是要收费。 那么 GPT-3.5 与 GPT-4 区别有多大呢&#xff0c;下面简单测试一下。 以从 TDengine 订阅数据为例&#xff0c;TDengine 算是不太小…

Appium自动化测试:通过appium的inspector功能无法启动app的原因

在打开appium-desktop程序&#xff0c;点击inspector功能&#xff0c;填写app的配置信息&#xff0c;启动服务提示如下&#xff1a; 报错信息&#xff1a; An unknown server-side error occurred while processing the command. Original error: Cannot start the cc.knowyo…

专业数据标注公司:景联文科技领航数据标注行业,满足大模型时代新需求

随着大模型的蓬勃发展和相关政策的逐步推进&#xff0c;为数据要素市场化配置的加速推进提供了有力的技术保障和政策支持。数据要素生产力度的不断提升&#xff0c;为数据标注产业带来了迅速发展的契机。 根据国家工信安全发展研究中心测算&#xff0c;2022年中国数据加工环节的…

leetcode (力扣) 201. 数字范围按位与 (位运算)

文章目录 题目描述思路分析完整代码 题目描述 给你两个整数 left 和 right &#xff0c;表示区间 [left, right] &#xff0c;返回此区间内所有数字 按位与 的结果&#xff08;包含 left 、right 端点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;left 5, right 7 输出…

c# 字符串转换为byte

c# 字符串转换为byte using System.Text; class proj {internal static void Main(string[] args){byte[] anew byte[3];Console.WriteLine("打印a");Console.WriteLine("a的长度{0}",a.Length);foreach (byte b in a){ Console.WriteLine(b); }a Encodi…

linux系统环境下mysql安装和基本命令学习

此篇文章为蓝桥云课--MySQL的学习记录 块引用部分为自己的实验部分&#xff0c;其余部分是课程自带的知识&#xff0c;链接如下&#xff1a; MySQL 基础课程_MySQL - 蓝桥云课 本课程为 SQL 基本语法及 MySQL 基本操作的实验&#xff0c;理论内容较少&#xff0c;动手实践多&am…

发现区块链世界的新大门——AppBag.io DApp导航网站全面解析

随着区块链技术的飞速发展&#xff0c;分布式应用&#xff08;DApp&#xff09;个充满创新和可能性的领域里&#xff0c;appbag.io DApp导航网站应运而生&#xff0c;为您打开探索区块链世界的新大门。 区块链应用的集大成者 AppBag.io DApp导航网站不仅是一个DApp的集散地&a…

muduo源码剖析之TcpServer服务端

简介 TcpServer拥有Acceptor类&#xff0c;新连接到达时new TcpConnection后续客户端和TcpConnection类交互。TcpServer管理连接和启动线程池&#xff0c;用Acceptor接受连接。 服务端封装 - muduo的server端维护了多个tcpconnection 注意TcpServer本身不带Channel&#xff0…

国民技术Cortex-M0系列单片机IAP升级

考虑到设备部署到现场后有可能需要进行软件升级&#xff0c;之前做过PIC系列单片机的升级&#xff0c;现在想做个国民技术N32G031系列Cortex-M0内核的单片机IAP方案。 因为国民技术系列单片机在很多大程度上都模仿了STM32&#xff0c;所以我想其升级方案极有可能差不多。于是在…

Toolformer论文阅读笔记(简略版)

文章目录 引言方法限制结论 引言 大语言模型在zero-shot和few-shot情况下&#xff0c;在很多下游任务中取得了很好的结果。大模型存在的限制&#xff1a;无法获取最新的信息、无法进行精确的数学计算、无法理解时间的推移等。这些限制可以通过扩大模型规模一定程度上解决&…

视频封面:从视频中提取封面,轻松制作吸引人的视频

在当今的数字时代&#xff0c;视频已成为人们获取信息、娱乐和交流的重要方式。一个吸引人的视频封面往往能抓住眼球&#xff0c;提高点击率和观看率。今天将介绍如何从视频中提取封面&#xff0c;轻松制作吸引人的视频封面。 一、准备素材选择合适的视频片段 首先&#xff0…

ubuntu中用docker部署jenkins,并和码云实现自动化部署

1.部署jenkins docker network create jenkins docker run --name jenkins-docker --rm --detach \--privileged --network jenkins --network-alias docker \--env DOCKER_TLS_CERTDIR/certs \--volume jenkins-docker-certs:/certs/client \--volume jenkins-data:/var/jen…