解析僵尸进程和孤儿进程
来源:互联网 发布:网络延迟怎么解决 编辑:程序博客网 时间:2024/06/07 02:15
大家都知道Linux中的进程分为多种状态,例如:
“R (running)”运行状态、
“S (sleeping)”睡眠状态(浅度睡眠)、
“D (disk sleep)”磁盘睡眠状态、
“T (stopped)”停止进程、
“X (dead)”死亡状态、
“Z (zombie)”僵死状态等等。
僵死状态是一个比较特殊的状态:当进程退出并且父进程(使用wait()系统调用)没有读取到子进程退出的返回代码时就会产生僵尸进程。僵尸进程会以终止状态保持在进程表中,并且会一直等待父进程读取退出状态代码。如果其父进程还存在而一直不调用wait,则该僵尸进程将无法回收,等到其父进程退出后该进程将被init回收
现在我们来用代码模拟一下僵尸进程:
再来看一下运行结果:
孤儿进程:一个父进程退出后,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
来看一下孤儿进程的实现:
运行结果:
僵尸进程危害场景:
例如有个进程,它定期的产生一个子进程,这个子进程需要做的事情很少,做完它该做的事情之后就退出了,因此这个子进程的生命周期很短,但是,父进程只管生成新的子进程,至于子进程 退出之后的事情,则一概不闻不问,这样系统运行上一段时间之后,系统中就会存在很多的僵死进程。
倘若用ps命令查看的话,就会看到很多状态为Z的进程。 严格地来说,僵死进程并不是问题的根源,罪魁祸首是产生出大量僵死进程的那个父进程。
那我们该如何消灭系统中大量的僵死进程呢?答案就是把产生大量僵死进程的那个元凶杀掉(也就是通过kill发送SIGTERM或者SIGKILL信号啦)。杀掉元凶进程之后,它产生的僵死进程就变成了孤儿进程,这些孤儿进程会被init进程接管,init进程会wait()这些孤儿进程,释放它们占用的系统进程表中的资源,这样,这些已经僵死的孤儿进程 就能瞑目而去了。
- 解析僵尸进程和孤儿进程
- 孤儿和僵尸进程
- 孤儿进程和僵尸进程
- 僵尸进程和孤儿进程
- 孤儿进程和僵尸进程
- 孤儿进程和僵尸进程
- 僵尸进程和孤儿进程
- 孤儿进程和僵尸进程
- 僵尸进程和孤儿进程
- 僵尸进程和孤儿进程
- 僵尸进程和孤儿进程
- 僵尸进程和孤儿进程
- 僵尸进程和孤儿进程
- 僵尸进程和孤儿进程
- 孤儿进程和僵尸进程
- 僵尸进程和孤儿进程
- 孤儿进程和僵尸进程
- 僵尸进程和孤儿进程
- git Permission denied (publickey). fatal: Could not read from remote repository. Please make sure y
- 数组2:旋转数组的最小数字
- 关于导航条或类似元素的位置问题
- 一、冒泡排序演进
- 2017网易实习生招聘编程题之魔力手环(矩阵幂)
- 解析僵尸进程和孤儿进程
- Spring + ActiveMQ 整合
- 数组3:调整数组顺序使奇数位于偶数前面
- 背包问题
- ExecutorService深入理解
- Codeforces 803 B. Distances to Zero (模拟
- Java 8时间
- javaweb基础----struts驱动模型
- Mac下使用Spark-shell实现WorldCount