Linux中的僵死进程(01)---僵死进程的概念

环境:Vmware Workstation;CentOS-6.4-x86_64

说明:

1、僵死进程:子进程死亡,父进程存在。

2、子进程不会被回收,回收的时机是父进程退出;也就是说,僵死进程的子进程,只有父进程退出的时候才会被回收。

下面的程序是实现僵死进程的一个例子:

#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>

int main(int argc, char *args[])
{
	// 执行fork并获取返回值
	pid_t id = fork();
	// 判断fork是否成功
	// 当返回值为-1时,说明fork失败
	if (id == -1)
	{
		printf("fork failed : %s", strerror(errno));
	}
	if (id > 0)
	{
		// 父进程休眠20秒
		sleep(20);
	}
	else
	{
		// 子进程立即退出
		exit(0);
	}
	return 0;
}

编译并执行程序:

[negivup@negivup mycode]$ gcc -o main main.c
[negivup@negivup mycode]$ main
程序还在执行,没有退出的时候,打开一个新的终端,查看僵死进程的状态
另一个终端:

[negivup@negivup ~]$ ps -aux
negivup  15025  0.0  0.0   3916   340 pts/1    S+   18:16   0:00 main             这是僵死进程
negivup  15026  0.0  0.0      0     0 pts/1    Z+   18:16   0:00 [main] <defunct> 这是等待回收的子进程,defunct意思“死的” 
这个死的进程,只有在父进程消亡的时候才会被回收。


PS:根据传智播客视频学习整理得出。

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