您的位置:首页 > 运维架构 > Linux

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

2015-09-20 18:12 537 查看
环境: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:根据传智播客视频学习整理得出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: