代码实现僵尸进程,孤儿进程
2018-03-08 16:36
465 查看
僵尸进程
在Linux中,进程分为多种状态,例如:R (running):运行状态、
S (sleeping):睡眠状态(浅度睡眠)、
D (disk sleep):磁盘睡眠状态、
T (stopped):停止进程、
X (dead):死亡状态、
Z (zombie):僵死状态等等。
僵死状态是一个比较特殊的状态:当进程退出并且父进程(使用wait()系统调用)没有读取到子进程退出的返回代码时就会产生僵尸进程。僵尸进程会以终止状态保持在进程表中,并且会一直等待父进程读取退出状态代码。如果其父进程还存在而一直不调用wait,则该僵尸进程将无法回收,等到其父进程退出后该进程将被init回收 。
代码实现:
运行结果:
僵尸进程的危害:
例如有个进程,它定期的产生一个子进程,这个子进程需要做的事情很少,做完它该做的事情之后就退出了,因此这个子进程的生命周期很短,但是,父进程只管生成新的子进程,至于子进程 退出之后的事情,则一概不闻不问,这样系统运行上一段时间之后,系统中就会存在很多的僵死进程。
倘若用ps命令查看的话,就会看到很多状态为Z的进程。 严格地来说,僵死进程并不是问题的根源,罪魁祸首是产生出大量僵死进程的那个父进程。
那我们该如何消灭系统中大量的僵死进程呢?答案就是把产生大量僵死进程的那个元凶杀掉(也就是通过kill发送SIGTERM或者SIGKILL信号啦)。杀掉元凶进程之后,它产生的僵死进程就变成了孤儿进程,这些孤儿进程会被init进程接管,init进程会wait()这些孤儿进程,释放它们占用的系统进程表中的资源,这样,这些已经僵死的孤儿进程 就能瞑目而去了。
孤儿进程
一个父进程退出后,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。代码实现:
运行结果:
相关文章推荐
- 使用代码模拟实现僵尸进程, 孤儿进程的场景
- 僵尸进程和孤儿进程的模拟实现
- PHP实现系统编程(二) --- 多进程编程介绍及孤儿进程、僵尸进程
- Linux 中模拟实现僵尸进程和孤儿进程
- 模拟实现僵尸进程和孤儿进程
- 僵尸进程,孤儿进程的实现
- 模拟实现僵尸进程, 孤儿进程
- 孤儿进程和僵尸进程的模拟实现
- 模拟实现僵尸进程和孤儿进程
- 模拟实现僵尸进程, 孤儿进程的场景
- 孤儿进程与僵尸进程的实现与总结
- 僵尸进程与孤儿进程模拟实现
- Linux环境下实现僵尸进程和孤儿进程
- linux中的孤儿进程和僵尸进程详解及模拟实现
- 模拟实现僵尸进程和孤儿进程
- 僵尸进程和孤儿进程代码编写及atexit相关验证
- 孤儿进程与僵尸进程[总结]
- 安卓的进程与线程及其相关代码实现
- 孤儿进程与僵尸进程[总结]
- linux下的僵尸进程产生原因和解决方法(含具体代码)