僵死狀態(Zombies)是一個比較特殊的狀態。有些人認爲這個狀態是在父進程死亡而子進程存活時產生的。實際上不是這樣的。父進程可能已經死了但自己稱依然存活着,那個子進程的父進程將會成爲init進程,pid 1.當進程退出並且父進程(使用wait()系統調用)沒有讀取到子進程退出的返回代碼時就會產生僵死進程。僵死進程會以終止狀態保持在進程表中,並且會一直在等待父進程讀取退出狀態代碼。
下面就是創建一個維持30秒僵死進程的例子:
#include <stdio.h>
#include <stdlib.h>
/*
* A program to create a 30s zombie
* The parent spawns a process that isn't reaped until after 30s.
* The process will be reaped after the parent is done with sleep.
*/
int main(int argc, char **argv[])
{
int id = fork();
if ( id > 0 ) {
printf("Parent is sleeping..n");
sleep(30);
}
if ( id == 0 )
printf("Child process is done.n");
exit(EXIT_SUCCESS);
}