Linux 僵尸进程与孤儿进程

1. 背景

前几天参加一个面试,遇到了这个问题:你知道僵尸进程怎么产生的么?所以来总结一下这个问题。

2.僵尸进程与孤儿进程

会涉及到两个概念:父进程、子进程。

正常情况下,子进程是通过父进程创建的,子进程再创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法知道子进程到底何时结束。 当一个进程完成任务终止之后,它的父进程需要调用wait()或者waitpid()系统调用释放子进程。

僵尸进程的产生:父进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵尸进程。

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

3.僵尸进程的危害与解决

危害:如果父进程不调用wait / waitpid, 那么保留子进程一直没有释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的,如果大量的产生僵尸进程,将因为没有可用的进程号而导致系统不能产生新的进程. 此即为僵尸进程的危害,应当避免。

解决方式就是杀死僵尸进程的父进程,让其变为孤儿进程,使用init进程进行回收。

 

 

 

 

你可能感兴趣的:(面试,Linux)