linux/unix僵尸进程(转自http://www.cnblogs.com/newpanderking/p/3784328.html)
来源:互联网 发布:加拿大订酒店软件 编辑:程序博客网 时间:2024/03/29 16:25
什么是僵尸进程?
一个进程在调用exit命令结束自己的生命的时候,其实他并没有真正的被销毁,而是留下一个称为僵尸进程(Zombie)的数据结构(系统调用exit, 它的作用是使进程退出,但是也仅仅限于一个正常的进程变成了一个僵尸进程,并不能完全将其销毁)。在linux进程的状态中,僵尸进程是非常特殊的一种,它已经放弃了几乎所有的内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态信息供其他进程收集,除此以外,僵尸进程不再占有任何存储空间。他需要他的父进程来为他收尸,如果他的父进程没有安装SIGCHID信号处理函数调用wait或waitpid()等待子进程结束,又没有显示忽略该信号,那么它就一直保持僵尸状态,如果这时候父进程结束了,那么init进程会自动接收这个子进程,为他收尸,他还是能被清除掉的。但是如果父进程是一个循环,不会结束,那么子进程就会一直保持僵尸状态,这就是系统中为什么有时候会有很多的僵尸进程。
危害
unix提供了一种机制:在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存等。但是仍然为其保留一定的信息(包括进程号,退出状态,运行时间等),直到父进程通过wait/waitpid来取时才释放。但是这样就导致了问题,如果你进程不调用wait/waitpid的话,那么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的,如果大量的产生僵尸进程,将因为没有可用的进程号而导致系统不能产生新的进程。此即为僵尸进程的危害,应当避免。
避免
1.父进程调用wait和waitpid
2.用signal函数为SIGCHID安装handler,因为子进程结束后,父进程会收到该信号,可以在handler中调用wait回收。
3.用signal(SIGCHID,SIG_IGN)通知内核,那么子进程会被内核回收,不再向父进程发信号。
4.fork两次,用fork出来的子进程fork更多的进程。
- linux/unix僵尸进程(转自http://www.cnblogs.com/newpanderking/p/3784328.html)
- 一些技术大牛的博客集锦(转)http://www.cnblogs.com/newpanderking/p/4366174.html
- Linux常用命令(转自:http://www.cnblogs.com/laov/p/3541414.html)
- linux找不到动态链接库 .so文件的解决方法(转自:http://www.cnblogs.com/xudong-bupt/p/3698294.html)
- linux下I2C驱动架构全面分析【转自http://www.cnblogs.com/lcw/p/3297889.html】
- linux C守护进程编写http://www.cnblogs.com/ringwang/p/3528093.html
- 【linux】http://www.cnblogs.com/a2211009/p/4265225.html
- 机器学习、计算机视觉有关书籍--转自http://www.cnblogs.com/xmphoenix/p/3683870.html
- 转自博客园:http://www.cnblogs.com/txw1958/p/wechat-tutorial.html
- 大型网站架构学习笔记(转自http://www.cnblogs.com/xrq730/p/4954152.html)
- mysql事务和锁InnoDB(转自http://www.cnblogs.com/zhaoyl/p/4121010.html)
- Qt之QCUSTOMPLOT绘图(转自http://www.cnblogs.com/yingjiehit/p/3988701.html)
- 图像的矩特征(转自http://www.cnblogs.com/pengkunfan/p/3998921.html)
- grep, sed 与 awk 转自 http://www.cnblogs.com/moveofgod/p/3540575.html
- Unity3d跨平台原理 转自 http://www.cnblogs.com/wonderKK/p/4095632.html
- Zookeeper的功能以及工作原理 (转自:http://www.cnblogs.com/felixzh/p/5869212.html)
- FCN网络的训练 -- 转自http://www.cnblogs.com/xuanxufeng/p/6243342.html
- 浅谈JavaScript、ES5、ES6 ,,转自http://www.cnblogs.com/lovesong/p/4908871.html
- 依然大爱的《棋魂》
- QT中各种MessageBox的使用
- Unity中添加组件的几种方法
- 2.3 IP网络性能测量
- IOS开发调用图片库或相机时界面设定为中文
- linux/unix僵尸进程(转自http://www.cnblogs.com/newpanderking/p/3784328.html)
- 公钥证书cer,pfx
- android 关于ExpandableListView单击一个group其他的group关闭,此group标题应该顶头
- TCHAR, WCHAR, LPSTR, LPWSTR, LPCTSTR<三>
- hdu 5023(线段树区间更新+区间查询)
- 内存池技术介绍
- 2.4 IP网络对传输协议的影响
- android网络编程 -- Socket 通信(03) 点对点Android聊天室实现(带服务器) [附源码分析]
- Lucene 分词器