操作系统-僵尸进程和孤儿进程
1. 僵尸进程
僵尸进程:子进程比父进程先结束,而父进程又没有释放子进程占用的资源,那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵尸进程。
- 进程已经执行完毕,不再占用其他资源,但是依然占据着进程表项。(或者说,进程表项是其唯一还占据的资源)
- 僵尸进程是操作系统的一种设计,而不是错误。这是为了需要保留一部分进程信息,提供给父进程进行检索。
- 具体来说,进程表项提供给父进程,这个子进程为何退出、成功了还是失败了等等,父进程按照这些信息决定下一步的操作。
- 父进程调用
wait()
或者waitpid()
来检索子进程的状态,然后才会释放内存表项。
- 少量的僵尸进程对资源的消耗不大(仅仅消耗进程表项)
- 但是一旦过量聚集,或许会导致能够分配的进程
ID
不足,会造成一定的影响。
- 一般来说,通过父进程及时进行
wait()
或者waitpid()
,回收页表项,就不会造成僵尸进程堆积。
2. 孤儿进程
孤儿进程:父进程退出了,而它的一个或多个进程还在运行,那这些子进程都会成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init 进程对它们完成状态收集工作。
- 父进程早于子进程退出,就会造成孤儿进程
- 孤儿进程对操作系统资源的影响比较有限,会被
init
进程自动收养。 - 操作系统对于孤儿进程的处理办法已经比较完善了。