进程在它的生命周期有几种状态:睡眠,可运行,停止,正在运行和僵死状态。所谓僵死进程,指的是一个进程已经退出,它的内存和相关的资源已经被内核释放掉,但是在进程表中这个进程项(entry)还保留着,以便它的父进程得到它的退出状态。一个进程退出时,它的父进程会收到一个SIGCHLD信号。一般情况下,这个信号的句柄通常执行wait系统调用,这样处于僵死状态的进程会被删除。如果父进程没有这么做,结果是什么呢?毫无疑问,进程会处于僵死状态。实际上,僵死进程不会对系统有太大的伤害,最多就是它的进程号(PID)和进程表中的进程项系统不能使用。
举例地说就是: 一个父进程fork了一个子进程出来,然后它们两个就各自执行自己的代码,在某一时刻,子进程退出了。但是此时子进程还有一定的空间并没有被操作系统回收。需要父进程使用wait系列的系统调用对该子进程进行回收,这样子进程就能够完全地从系统中消失。
所以僵尸进程就是说子进程在退出之后到被父进程回收之前的这段时间