什麼是僵死進程(Zombies)


僵死狀態(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);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章