Linux --僵尸进程

28 篇文章 0 订阅
9 篇文章 0 订阅

概念

  僵尸进程,Linux中记为 Z 是进程运行时可能会出现的有一种状态,其是当进程退出时父进程本没有读取到子进程退出的返回代码,也就是说,子进程先于父进程结束,而父进程并没有回收子进程,进行占用资源的释放,这个时候该进程便成为了僵尸态。

表现

  当僵尸进程产生之后,该进程便会以终止状态保持在进程表中,并且会一直等待父进程读取退出状态代码。

僵尸进程的危害

  1. 僵尸进程出现后必会有子进程以终止状态保持,不上不下的。
  2. 占用资源,产生内存泄漏
  3. 每一个内核创造进程的数量是有一定的,处于僵尸态的进程不进行回收会占用进程位

僵尸进程的处理及避免

  1. 进行两次fork()

  父进程进行一次fork之后继续执行,将产生的子进程再一次fork产生孙进程,将子进程使用exit正常退出后,孙进程便会被init进程收留接管从而避免僵尸进程产生。

  1. 调用wait()或者waitpid()函数

  当父进程调用到wait()时,对自己进行阻塞,寻找是否有已经完成的子进程,若有,则对该子进程进行资源回收处理,并且彻底销毁;若没有,则父进程一直停滞在此处。知道等到一个为止。
  waitpid(),可以等待任意子进程提出,也可以等待指定子进程退出,同时支持阻塞等待子进程退出,也支持非阻塞等待子进程退出。使用非阻塞时,我们需要一直对子程序的状态进行监视,否则当该接口一次调用后便对后面子程序没有了作用。

  1. 使用signal函数,显示忽略SIGCHLD信号

当进程成为僵尸进程后,SIGCHLD会发送给它的父进程。在该模式下,子进程退出后子进程信息会被自动回收,不产生僵尸进程。

僵尸进程示例

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值