Skip to content

操作系统-僵尸进程和孤儿进程

1. 僵尸进程

僵尸进程:子进程比父进程先结束,而父进程又没有释放子进程占用的资源,那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵尸进程。

  • 进程已经执行完毕,不再占用其他资源,但是依然占据着进程表项。(或者说,进程表项是其唯一还占据的资源)
  • 僵尸进程是操作系统的一种设计,而不是错误。这是为了需要保留一部分进程信息,提供给父进程进行检索。
  • 具体来说,进程表项提供给父进程,这个子进程为何退出、成功了还是失败了等等,父进程按照这些信息决定下一步的操作。
  • 父进程调用 wait() 或者 waitpid() 来检索子进程的状态,然后才会释放内存表项。

  • 少量的僵尸进程对资源的消耗不大(仅仅消耗进程表项)
  • 但是一旦过量聚集,或许会导致能够分配的进程 ID 不足,会造成一定的影响。

  • 一般来说,通过父进程及时进行 wait() 或者 waitpid() ,回收页表项,就不会造成僵尸进程堆积。

2. 孤儿进程

孤儿进程:父进程退出了,而它的一个或多个进程还在运行,那这些子进程都会成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init 进程对它们完成状态收集工作。

  • 父进程早于子进程退出,就会造成孤儿进程
  • 孤儿进程对操作系统资源的影响比较有限,会被 init 进程自动收养。
  • 操作系统对于孤儿进程的处理办法已经比较完善了。