【发布时间】:2014-01-08 10:50:16
【问题描述】:
当父进程在子进程死亡后不使用等待系统调用来读取其退出状态时,就会创建一个僵尸,而当原始父进程在子进程之前终止时,一个孤儿进程是由 init 回收的子进程。
在内存管理和进程表方面,这些进程的处理方式有何不同,特别是在 UNIX 中?
什么是僵尸或孤儿的创建可能对更大的应用程序或系统有害的示例或极端情况?
【问题讨论】:
-
制造大量僵尸并监视你的系统 ssssllooooowwww
-
僵尸进程没有理由消耗(大量)内存......它已经死了。它基本上是一个占位符,以便父级在将来的某个时候仍然可以读取退出状态。
-
僵尸没有占用任何显着的内存或资源,它(实际上)只是一个等待传递的退出状态。孤儿是一个活的、正在运行的进程,就像任何其他进程一样——它只是有一个特殊的名称。
-
@clintp 但是孤儿不能成为僵尸进程,因为一旦完成,操作系统就会处理它?
-
如果
init进程中存在错误,或者阻止init正常工作的内核错误,孤立的进程可能会变成僵尸。否则没有。但换个角度看,在父进程清理之前,每个退出的进程都是僵尸,所以是的,它们确实变成了僵尸,但不会持续很长时间。
标签: c unix fork zombie-process