Zombie程序
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
- vcxzfdsarewq
- 帖子: 92
- 注册时间: 2007-04-20 18:22
- 来自: Matrix
Zombie程序
今天top时有两个Zombie程序
kill不掉,是scim和netstat
我的scim还是能输入的
请高手指点一下
kill不掉,是scim和netstat
我的scim还是能输入的
请高手指点一下
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
- vcxzfdsarewq
- 帖子: 92
- 注册时间: 2007-04-20 18:22
- 来自: Matrix
- vcxzfdsarewq
- 帖子: 92
- 注册时间: 2007-04-20 18:22
- 来自: Matrix
sudo 了,切换到superuser都不行eexpress 写了:不会吧。 -9都不行?????你sudo了????????
root@ubuntu:/etc# ps aux |grep "defunct"
hitch 5888 0.0 0.0 0 0 ? Z 11:25 0:00 [scim] <defunct>
root 6355 0.0 0.0 2884 752 pts/1 R+ 12:43 0:00 grep defunct
root@ubuntu:/etc# killall -9 scim
root@ubuntu:/etc# ps aux |grep "defunct"
hitch 5888 0.0 0.0 0 0 ? Z 11:25 0:00 [scim] <defunct>
root 6373 0.0 0.0 2884 752 pts/1 R+ 12:43 0:00 grep defunct
- nobrain
- 帖子: 808
- 注册时间: 2005-08-25 13:58
- 来自: ustc
- 联系:
- vcxzfdsarewq
- 帖子: 92
- 注册时间: 2007-04-20 18:22
- 来自: Matrix
- xhy
- 帖子: 3916
- 注册时间: 2005-12-28 1:16
- 系统: Ubuntu 12.10 X64
- 来自: 火星
- nobrain
- 帖子: 808
- 注册时间: 2005-08-25 13:58
- 来自: ustc
- 联系:
- xhy
- 帖子: 3916
- 注册时间: 2005-12-28 1:16
- 系统: Ubuntu 12.10 X64
- 来自: 火星
nobrain 写了:或者把父进程咔嚓啦,由init进程waitxhy 写了:zomble进程是杀不掉的 唯一的办法就是重启
当子进程退出时 就会进入zomble状态 内核给子进程记录一些信息到一张表中
直到父进程调用wait系列系统调用去取回这些信息 子进程才能正常退出
一个进程退出时,内核会逐个检查系统中的活动进程,把所有这个进程的子进程的ppid改为1
而zomble中的进程不是活动进程 因此不会被init领养
一般遇到zomble可以无视 因此zomble仅仅占用一个进程描述符 以及少量的终止信息
对系统的影响忽略不计
如果在服务器中有大量的zomble出现 可能会导致达到进程上限 无法创建新的进程
个人使用的话 10000个zomble都无所谓的
目前负债150多万
- nobrain
- 帖子: 808
- 注册时间: 2005-08-25 13:58
- 来自: ustc
- 联系:
在父进程退出的时候,zombie的子进程会被init领养的,写个程序就可以验证了。xhy 写了:一个进程退出时,内核会逐个检查系统中的活动进程,把所有这个进程的子进程的ppid改为1
而zomble中的进程不是活动进程 因此不会被init领养
代码: 全选
$ uname -r
2.6.20-16-generic
代码: 全选
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
switch(fork())
{
case -1:
fprintf(stderr, "fork() failed\n");
return EXIT_FAILURE;
break;
case 0: /* child process */
printf("This is child pid = %ld\n",
(long)getpid());
switch(fork())
{
case -1:
fprintf(stderr," fork failed\n");
exit(EXIT_FAILURE);
break;
case 0:
printf("grand process pid = %ld\n",
(long)getpid());
sleep(4);
exit(EXIT_SUCCESS);
break;
default:
break;
}
exit(EXIT_SUCCESS);
break;
default:
break;
}
sleep(10);
exit(EXIT_SUCCESS);
}
父进程创建了子进程,子进程处于zombie状态。子进程的子进程即孙进程在sleep了4秒之后,先于父进程退出,但是这个孙进程并没有处于zombie状态,而是消失了。此时,子进程仍然存在并处于zombie状态。似乎zombie进程的子进程也被init领养了。
爱喝真猪奶茶的夜鸣猪
- skyx
- 论坛版主
- 帖子: 9202
- 注册时间: 2006-12-23 13:46
- 来自: Azores Islands
- 联系:
- xhy
- 帖子: 3916
- 注册时间: 2005-12-28 1:16
- 系统: Ubuntu 12.10 X64
- 来自: 火星
- BigSnake.NET
- 帖子: 12522
- 注册时间: 2006-07-02 11:16
- 来自: 廣州
- 联系: