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

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.lryc.cn/news/236755.html

相关文章:

  • JDY蓝牙注意事项
  • 服务器IPMI管理操作
  • 自动驾驶学习笔记(九)——车辆控制
  • HTML5学习系列之项目实战1
  • git 提交成了LFS格式,如何恢复
  • 【ISP图像处理】Demosaic去马赛克概念介绍以及相关方法整理
  • 单图像3D重建AI算法综述【2023】
  • three.js相机调用reset方法复原但无法完全复原
  • 前端为什么要工程化
  • 软件测试/测试开发/人工智能丨视觉与图像识别自动化测试
  • nvm的下载与使用
  • 拼多多官方开放平台接口app商品详情接口获取实时商品详情数据演示
  • STM32F4系列单片机GPIO概述和寄存器分析
  • 【LeetCode刷题】--9.回文数
  • 大数据-之LibrA数据库系统告警处理(ALM-12057 元数据未配置周期备份到第三方服务器的任务)
  • 毅速丨嫁接打印在模具制造中应用广泛
  • 『亚马逊云科技产品测评』活动征文|基于next.js搭建一个企业官网
  • C# Winform围棋棋盘
  • vue使用本地图片设置为默认图
  • day17-高速缓冲区的管理机制
  • 文心一言 VS 讯飞星火 VS chatgpt (139)-- 算法导论11.4 3题
  • Java 解压文件
  • SASS/SCSS精华干货教程
  • 8.jib-maven-plugin构建springboot项目镜像,docker部署配置
  • 海康威视综合安防管理平台任意文件上传
  • Linux环境下C++ 接入OpenSSL
  • 美国网站服务器SSL证书介绍
  • JSP命令标签 静态包含/动态包含
  • Cesium点位弹窗
  • 基于单片机16路抢答器仿真系统