【学习笔记】孤儿进程和僵尸进程
2015-08-31 18:36
453 查看
正常情况:
子进程是通过父进程创建的,子进程再创建新的进程,父进程不能预测子进程的结束时刻。当一个
进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态。
问题和危害
在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存等,但是仍然为其保留一定的信息(如PID、运行时间、退出状态)直到父进程通过wait
/ waitpid来取时才释放。问题在于,进程不调用wait / waitpid,保留的信息不能释放,造成进程号的占用。而系统的进程号是有限的,到达极限后使得系统不能创建新进程。大量这样的僵尸进程使得系统瘫痪。
孤儿进程是没有父进程的进程,将由系统内核init接管,init会循环wait直到孤儿进程消亡。孤儿进程并不会有什么危害。
任何一个子进程(init除外)在exit()之后,并非马上就消失掉,而是留下一个称为僵尸进程(Zombie)的数据结构,等待父进程处理。这是每个
子进程在结束时都要经过的阶段。如果子进程在exit()之后,父进程没有来得及处理,这时用ps命令就能看到子进程的状态是“Z”。如果父进程能及时 处理,可能用ps命令就来不及看到子进程的僵尸状态,但这并不等于子进程不经过僵尸状态。 如果父进程在子进程结束之前退出,则子进程将由init接管。init将会以父进程的身份对僵尸状态的子进程进行处理。
僵尸进程的场景和处理
系统有个进程只管产生新进程,而对产生的新进程不管不问,系统运行上一段时间之后,系统中就会存在很多的僵死进程,倘若用ps命令查看的话,就会看到很多状态为Z的进程。想要消灭这些僵尸进程,就要通过kill发送信号量干掉元凶的父进程,使得产生状态为Z的进程被init管理,从而让系统内核自动释放所占有的资源。
子进程是通过父进程创建的,子进程再创建新的进程,父进程不能预测子进程的结束时刻。当一个
进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态。
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。 僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。
问题和危害
在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存等,但是仍然为其保留一定的信息(如PID、运行时间、退出状态)直到父进程通过wait
/ waitpid来取时才释放。问题在于,进程不调用wait / waitpid,保留的信息不能释放,造成进程号的占用。而系统的进程号是有限的,到达极限后使得系统不能创建新进程。大量这样的僵尸进程使得系统瘫痪。
孤儿进程是没有父进程的进程,将由系统内核init接管,init会循环wait直到孤儿进程消亡。孤儿进程并不会有什么危害。
任何一个子进程(init除外)在exit()之后,并非马上就消失掉,而是留下一个称为僵尸进程(Zombie)的数据结构,等待父进程处理。这是每个
子进程在结束时都要经过的阶段。如果子进程在exit()之后,父进程没有来得及处理,这时用ps命令就能看到子进程的状态是“Z”。如果父进程能及时 处理,可能用ps命令就来不及看到子进程的僵尸状态,但这并不等于子进程不经过僵尸状态。 如果父进程在子进程结束之前退出,则子进程将由init接管。init将会以父进程的身份对僵尸状态的子进程进行处理。
僵尸进程的场景和处理
系统有个进程只管产生新进程,而对产生的新进程不管不问,系统运行上一段时间之后,系统中就会存在很多的僵死进程,倘若用ps命令查看的话,就会看到很多状态为Z的进程。想要消灭这些僵尸进程,就要通过kill发送信号量干掉元凶的父进程,使得产生状态为Z的进程被init管理,从而让系统内核自动释放所占有的资源。
相关文章推荐
- freemarker程序开发
- js编码后台解码
- X86 openWRT 虚拟机编译教程 在ubuntu10中X86 OpenWRT的源码编译
- 一次完整的HTTP请求所经历的7个步骤
- ISO/IEC 9899:2011 条款6.4——词法元素
- Cloudera-Manager修改集群的IP
- web工程引用其他java工程解决方法
- Python单元测试框架Pytest——如何生成测试报告
- Android学习笔记(五)Fragment简介
- NGUI消耗性能分析
- 利用Amazon Mobile Analytics与R深入探究移动应用的使用模式
- HDU 3594
- android 加载图片到内存(缩放)
- 常见的PHP设计模式
- Java多线程之 Thread VS Runnable 【带案例】
- Redis 专题二: RDB 与 AOF 持久化
- 面试题:最长公共子串
- ajax的简单应用
- java并发:FutureTask 和 CountDowmLatch 的使用
- UOJ #3(【NOI2014】魔法森林-LCT区间最值)