僵尸进程
来源:互联网 发布:head first java 下载 编辑:程序博客网 时间:2024/06/03 20:10
问:Unix/Linux系统中僵尸进程是如何产生的?有什么危害?如何避免?
一个进程在调用exit命令结束自己的生命的时候,其实它并没有真正的被销毁,而是留下一个称为僵尸进程(Zombie)的数据结构(系统调用exit,它的作用是使进程退出,但也仅仅限于将一个正常的进程变成一个僵尸进程,并不能将其完全销毁)。
在Linux进程的状态中,僵尸进程是非常特殊的一种,它已经放弃了几乎所有内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态等信息供其他进程收集,除此之外,僵尸进程不再占有任何内存空间。它需要它的父进程来为它收尸,如果他的父进程没安装SIGCHLD信号处理函数调用wait或waitpid()等待子进程结束,又没有显式忽略该信号,那么它就一直保持僵尸状态,如果这时父进程结束了,那么init进程自动会接手这个子进程,为它收尸,它还是能被清除的。但是如果如果父进程是一个循环,不会结束,那么子进程就会一直保持僵尸状态,这就是为什么系统中有时会有很多的僵尸进程。
避免zombie的方法:
1) 在SVR4中,如果调用signal或sigset将SIGCHLD的配置设置为忽略,则不会产生僵死子进程。另外,使用SVR4版的sigaction,则可设置SA_NOCLDWAIT标志以避免子进程僵死。
Linux中也可使用这个,在一个程序的开始调用这个函数 signal(SIGCHLD,SIG_IGN);
2) 调用fork两次。
3) 用waitpid等待子进程返回。
0 0
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- <mvn:default-servlet-handler/>标签作用
- 项目总结整理
- 文章标题
- string类的简单实现(深拷贝,浅拷贝)
- 图片压缩
- 僵尸进程
- 为什么 在springmvc.xml 中 配置了<mvc:default-servlet-handler /> 一定要配置<mvc:annotation-driven >?
- 剑指offer 重建二叉树
- Linux下正则表达式以及几种工具:grep,sed,awk,cut,sort,uniq的简单应用
- JavaScript语言
- 初识swoole
- Android 插件技术实战总结
- ThreadLocal 学习
- 关于用Class.forName(“com.mysql.jdbc.Driver”)注册数据库驱动