分析Android系统启动过程的时候,init进程调用 signal_handler_init 函数用于设置子进程信号处理函数,它被定义在 system/core/init/signal_handler.cpp中,主要用于防止init的子进程成为僵尸进程,看到这里有个名词要解释一下,什么是僵尸进程,看到一篇文章写的不错,转载一下,原文链接:http://www.nowamagic.net/librarys/veda/detail/1994

什么是僵尸进程 Zombie Process

僵尸进程是指一个已经终止、但是其父进程尚未对其进行善后处理获取终止进程的有关信息的进程,这个进程被称为“僵尸进程”(zombie)。

怎样产生僵尸进程

一个进程在调用exit命令结束自己的生命的时候,其实它并没有真正的被销毁,而是留下一个称为僵尸进程(Zombie)的数据结构(系统调用exit, 它的作用是使进程退出,但也仅仅限于将一个正常的进程变成一个僵尸进程,并不能将其完全销毁)。

在Linux进程的状态中,僵尸进程是非常特殊的一种,它已经放弃了几乎所有内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位 置,记载该进程的退出状态等信息供其他进程收集。除此之外,僵尸进程不再占有任何内存空间。它需要它的父进程来为它收尸,如果他的父进程没安装 SIGCHLD 信号处理函数调用wait或waitpid()等待子进程结束,又没有显式忽略该信号,那么它就一直保持僵尸状态,如果这时父进程结束了, 那么init进程自动会接手这个子进程,为它收尸,它还是能被清除的。但是如果如果父进程是一个循环,不会结束,那么子进程就会一直保持僵尸状态,这就是 为什么系统中有时会有很多的僵尸进程。

怎么查看僵尸进程

利用命令ps,可以看到有父进程ID为1的进程是孤儿进程;s(state)状态为Z的是僵尸进程。

注意:孤儿进程(orphan process)是尚未终止但已停止(相当于前台挂起)的进程,但其父进程已经终止,由init收养;而僵尸进程则是已终止的进程,其父进程不一定终止。

怎样来清除僵尸进程

1.改写父进程,在子进程死后要为它收尸。具体做法是接管SIGCHLD信号。子进程死后, 会发送SIGCHLD信号给父进程,父进程收到此信号后,执行 waitpid()函数为子进程收尸。这是基于这样的原理:就算父进程没有调用wait,内核也会向它发送SIGCHLD消息,尽管对的默认处理是忽略, 如果想响应这个消息,可以设置一个处理函数。
2.把父进程杀掉。父进程死后,僵尸进程成为"孤儿进程",过继给1号进程init,init始终会负责清理僵尸进程,关机或重启后所有僵尸进程都会消失。

避免产生僵尸进程的方法

1.在SVR4中,如果调用signal或sigset将SIGCHLD的配置设置为忽略,则不会产生僵死子进程。另外,使用SVR4版的 sigaction,则可设置SA_NOCLDWAIT标志以避免子进程僵死。 Linux中也可使用这个,在一个程序的开始调用这个函数signal(SIGCHLD,SIG_IGN)。
2.调用fork两次。
3.用waitpid等待子进程返回

什么是僵尸进程(Zombie)?相关推荐

  1. linux僵尸程序,什么是僵尸进程(zombie)?

    僵尸进程是指一个已经终止.但是其父进程尚未对其进行善后处理获取终止进程的有关信息的进程,这个进程被称为"僵尸进程"(zombie). 怎样产生僵尸进程 一个进程在调用exit命令结 ...

  2. 僵尸进程zombie与孤儿进程orphan

    代码已上传至https://github.com/gatieme/AderXCoding/tree/master/system/unix/zombie 问题提出 以前在学习<unix环境高级编程 ...

  3. 查询php僵死进程,linux查找僵尸进程(zombie进程)

    首先,我们可以用top命令来查看服务器当前是否有僵尸进程,可以看到第二行行尾有个 0 zombie,如果数字大于0,那么意味着服务器当前存在有僵尸进程 可以用ps和grep命令寻找僵尸进程 ps -A ...

  4. linux defunct 进程,Linux僵尸进程(Zombie or defunct)

    僵尸进程(Zombie or defunct)关于Linux僵尸进程,一般是由于子进程结束的时候,会有一些资源没有释放掉,直到父进程结束或者由父进程去处理它才可以! www.cit.cn 僵尸进程就是 ...

  5. linux下的僵尸进程 - Zombie

    在linux中你可能进程听到有僵尸进程,那么究竟什么是僵尸进程,他又是怎样产生的呢?下面我们通过1个例子来说明一下. 我们知道退出一个进程用系统调用exit, 但是这并不意味着该进程马上就消失了,事实 ...

  6. 如何察看僵尸进程 zombie

    其实这是系统维护每天必看的东西,都非常简单,也就是把平常使用的 ps -ef 多加一个l就可以看到更多详细的信息. top - 23:59:03 up 45 min,  6 users,  load ...

  7. 僵尸进程(zombie)以及避免方法

    僵尸进程在多进程环境下,父进程要长时间运行 ,期间可能创建子进程,然后子进程有 退出时,但是父进程还在运行,这时就产生了zombie进程.     子进程退出后,在进程表中还要占一项,并且子进程的一些 ...

  8. Linux:僵尸进程 Zombie;waitpid

    文章目录 参考 僵尸进程的表象 出现僵尸进程的情况 一种产生Coredump,而磁盘空间不够用 一种父进程未有waitpid回收子进程 僵尸进程的影响 system 函数调用执行的子进程 waitpi ...

  9. c语言如何不产生僵尸进程,第三章 九析带你处理 zombie(defunct) 进程

    目录 1 前言 2 僵尸进程 2.1 进程简介 2.2 僵尸进程例子 2.3 僵尸进程危害 3 处理僵尸进程 3.1 kill 命令 3.2 kill 父进程 3.3 reboot 3.4 magic ...

  10. 僵尸进程(Zombie process )

    转自:https://www.cnblogs.com/Anker/p/3271773.html 1.僵尸进程如何产生? 僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源 ...

最新文章

  1. NOIP2016天天爱跑步
  2. 「测评」酷炫“霸王龙”Miposaur机器人测评
  3. 疯狂的java 目录_疯狂创客圈 JAVA 高并发 总目录
  4. 小程序源码 租房管理系统_如何通过租房小程序开发快速引流
  5. 146. LRU 缓存机制
  6. WCF中几个容易忽略的知识点
  7. 修改npm安装的全局路径和配置环境变量的坑
  8. Docker,使生信分析更简单、可重复
  9. 2016开始工作一点谈
  10. Java 字符串格式化 String.format()
  11. 浅谈Android数据库DBFlow
  12. Gateway网关系列(二):SpringCloud Gateway入门实战,路由规则
  13. 初识HarmonyOS—小熊派BearPi-HM_Nano上手指南第二篇:源码获取
  14. Maven的作用通俗介绍
  15. 在html中不是链接目标属性,在HTML中,()不是链接的目标属性。A、selfB、newC、blankD、Top - 扁豆云问答...
  16. happen-before原则解读
  17. 微信公众号注册时提示该主体注册数量已超过上限怎么办?
  18. Auto.js Pro 调起APP并跳转至指定页面
  19. rancher发布应用_Rancher 上线应用商店的基本流程
  20. sql中limit后参数有引号_mySql limit 函数后的参数是什么意思

热门文章

  1. 小学计算机面试说课稿,小学信息技术面试说课稿(模板)
  2. 虚幻4 手持式AR应用 模板认识
  3. 软件研发中也有5S 管理?
  4. 学校做计算机教室锐捷,锐捷“云课堂”:先改变桌面云,再改变教室
  5. MindManager2022注册码-激活码-序列号相关问题解答
  6. Maven:mvn 命令的基本使用
  7. bash 脚本编程 教程
  8. 怎样用计算机计算矩阵,【活用工具】教你如何用卡西欧fx82es计算机计算复数 矩阵等...
  9. C语言写PCAP文件
  10. java如何对一个表达式开根号_Java中,如何对大数开根号啊!