Linux系统中,僵死进程 vs 孤儿进程
2022-05-13

一:基础概念

僵死进程:进程的PCB结构存在,进程主体释放,这种进程称为僵死进程。
一个进程使用fork创建子进程,子进程结束,父进程未获取子进程的退出码,从而子进程不得不保存退出码,所以整个PCB结构也就无法释放。
孤儿进程:一个父进程退出,它的一个或多个子进程还在运行,这些子进程被称为孤儿进程,孤儿进程会被进程init(进程号为1)接管,由init进程为它们完成状态收集工作。

二、问题与危害

我们知道在Linux系统中,正常情况下,一个子进程是由父进程创建的。子进程的创建和父进程的运行时一个异步过程,父进程不知道子进程什么时候运行结束,当一个进程完成后,他的父进程需要调用wait或waitpid函数来获取子进程的退出状态。         在Linux进程的状态中,僵尸进程是非常特殊的一种,它没有任何可执行代码,也不能被调度,仅仅在进程的列表中保留一个位置,记载该进程的退出状态等信息供其他进程收集。除此之外,僵尸进程不再占有任何内存空间。
它需要他的父进程来为他收尸,如果他的父进程么有调用wait或waitpid等待子进程的结束,又没有显示忽略该信息,那么它就一直保持僵尸状态,如果这时候父进程结束了,那么init进程自动会接手这个子进程,为它收尸,它还是能被清除的。但是如果父进程是一个循环,不会结束,那么子进程交一直保持僵尸状态,这就是为什么系统中有时会有很多僵尸进程。
这样就导致了问题,如果进程不调用wait / waitpid的话, 那么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的,如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程,这就是僵尸进程的危害,应当避免。

三、wait和waitpid

#include //提供pid_t的定义 #include pid_t wait(int *reval);
  • 进程一旦调用了wait,就立即阻塞自己,如果让它找到了一个僵死的子进程,wait就会收集处理这个进程的信息并将它彻底销毁后返回;如果没有找到这样的进程,它就会一直阻塞运行,知道有一个僵死的进程出现为止(wait处理掉第一个结束的进程)。
参数reval用来保存并收集退出进程的一些状态信息,是int类型的指针。因为我们对于进程是如何死掉的并不关心,只想要把僵死进程处理掉,就可以设定这个参数为NULL,例如 pid = wait(NULL);
如果调用成功,wait返回被收集了的子进程的PID,如果进程没有子进程,调用失败返回-1.#include #include pid_t waitpid(pid_t pid,int *reval,int options); 参数:pid > 0,只等待进程PID等于pid的子进程,不管有多少其它子进程结束了,只要指定pid的子进程没结束,waitpid就一直等待下去;
pid = -1,等待任意一个子进程退出,和wait没有区别;
pid = 0,等待同一个进程组中的任何子进程,如果子进程已经加入了别的进程组,waitpid不会对它做任何理睬。
pid WNOHANG:如果pid指定的子进程没有结束,则waitpid()函数立即返回0,而不是阻塞在这个函数上等待;如果结束了,则返回该子进程的进程号。
WUNTRACED:如果子进程进入暂停状态,则马上返回。 如果waitpid()函数执行成功,则返回子进程的进程号;如果有错误发生,则返回-1,并且将失败的原因存放在errno变量中。
失败的原因主要有:没有子进程(errno设置为ECHILD),调用被某个信号中断(errno设置为EINTR)或选项参数无效(errno设置为EINVAL)
  • waitpid(-1,NULL,0);
    这样调度waitpid就完全退化成了wait函数。
    wait函数就是经过包装了的waitpid函数。
声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 相关技术文库
  • 硬件
  • 原理图
  • 信号完整性
  • EMI
  • 用NPN三极管驱动继电器电路图

    继电器驱动电流一般需要20-40mA或更大,线圈电阻100-200欧姆,因此要加驱动电路1.晶体管用来驱动继电器,必须将晶体管的发射极接地。具体电路如下:NPN

    昨天
  • 9013三极管开关电路的分析

    9013是一种NPN型小功率三极管。三极管,是半导体基本元器件之一,具有电流放大作用,是电子电路的核心元件。三极管是在一块半导体基片上制作两个相距很近的PN结,

    昨天
  • 热释电传感器报警电路的设计

    本文为大家介绍热释电传感器报警电路的设计。设计方案热释电传感器报警电路主要由信号探测电路、信号处理电路、报警电路组成。系统框图如下图所示。方案系统图该方案采用R

    昨天
  • 剖析:LED变色灯电路

      LED变色灯是一种新型灯泡。它的外形与一般乳白色白炽灯泡相同,但点亮后会自动按一定的时间间隔变色。循环地发出青、黄、绿、紫、蓝、红、白色光。它适用于家庭生日

    前天
  • 电子工程师业余条件下制作电路板方法概述

      电路板是电子电路的载体,任何的电路设计都需要被安装在一块电路板上,才可以实现其功能。而加工电路板,又是业余电子爱好者感到最头痛的事,往往是:半天时间就设计好

    前天
  • 电子制作中的安全问题及防范措施

      在电子制作中有许多安全问题是不容忽视的,稍不注意将造成不可挽回的严重后果,轻则损坏仪器设备,重则伤及人身造成终身遗憾。总结起来大概有三个方面:制作者自身的安

    前天
  • 各种导线截面积与电流的关系详解

      导线截面积与电流的关系  一般铜线安全计算方法是:  2.5平方毫米铜电源线的安全载流量--28A。  4平方毫米铜电源线的安全载流量--35A。  6平方

    前天
  • 图文详解液晶面板制造全过程

      曾经爆发过的面板门事件,足以解释用户对于液晶显示器所采用液晶面板类型的重视,不仅如此,液晶显示器重要的技术提升,如LED背光,超广视角,都与面板有着直接的关

    前天
  • 部分电动自行车充电器电路解析

      电动自行车充电器   给电动车辆的铅酸电瓶、镍镉电瓶补充能源,要通过充电器进行。充电器的种类很多。一般以有无工频变压器区分可分为分两大类。大功率的

    前天
  • 电动自行车及其控制器简介

      电动自行车自从20世纪80年代发明以来经历了一个漫长的发展过程,在20世纪90年代北京的道路上曾经出现过电动自行车,但由于很多技术并没有过关以及交通管理上的

    前天
  • 部分电动自行车控制器电路解析

      本文分别介绍国内部分具有代表性的电动自行车控制器整机电路,并指出与其他产品的不同之处及其特点。所列电路均是根据实物进行测绘所得,图中元件号为笔者所标。通过介

    前天
  • 创意小制作:有趣的激光竖琴

      在上海世博会的伊朗馆,我看到了一架没有琴弦的竖琴,那是众多参观者公认的伊朗馆里最有趣的展品!参观者只要伸手穿过那架通体黑色的竖琴,音调就会被“奏响”。没有琴

    前天
下载排行榜
更多
EE直播间
更多
广告