怎样处理僵死进程

本文介绍了僵死进程的概念及其危害,并详细阐述了如何处理僵死进程,包括改写父进程以接管SIGCHLD信号、杀死父进程、使用fork()函数创建孤儿进程,以及通过自定义函数捕获SIGCHLD信号。文中给出了具体的C语言代码示例,演示了如何通过wait()和waitpid()函数避免僵死进程。
摘要由CSDN通过智能技术生成

首先大家知道什么叫做僵死进程吗????????????

1》僵死进程的定义(也叫僵尸进程):

僵死进程其实就是指在子进程退出时,父进程并未对其发出的SIGCHLD的信号进行适当处理,导致子进程停留在僵死状态等待其父进程为其收尸,这个状态下的子进程就是僵死进程;僵死进程它不占用内存空间,也没有任何可执行的代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态等信息供其它进程收集;如果僵死进程的父进程结束了,那么init进程自动会接手这个子进程,为他收尸,但是如果父进程是一个循环,不会结束,那么子进程就会一直保持僵死进程状态,这就是为什么系统中有时会有很多僵死进程。

那么怎么查看僵死进程?????????????????

2》僵死进程得到查看:

利用命令ps查看当前进程,其中有标记z的进程就是僵死进程

那么僵死进程会带来什么危害呢?????????????

3》僵死进程的危害:

如果父进程不调用wait()/waitpid()的话,那么存在于那个位置的信息就不会被释放,它的pcb就永远被占用,但是系统的进程表的容量是有限的,所能使用的进程号也是有限的,所以如果产生了大量的僵死进程,将因为没有可用的进程而导致系统不能产生新的进程;所以,僵死进程不仅占用系统的内存信息,还影响系统的性能,如果大量产生,还会导致系统瘫痪

怎样处理僵死进程???????????????????

4》僵死进程的处理

(1)改写父进程

在子进程死后要为他收尸,具体做法是接管SIGCHLD信号,子进程死后,会发出SIGCHLD信号给父进程,父进程收到此信号后,执行waitpid()函数为子进程收尸

这样基于的原理:就算父进程没有调用wait,内核也会向

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值