UNIX程序中如何杀掉由子进程产生的defunct?

binb 2000-07-13 05:22:00
加精
kill(pid,SIGKILL)好象不行?
...全文
129 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
genesis 2000-07-14
  • 打赏
  • 举报
回复
bind 你好,我觉得你的三个问题基本相同,所以一起回答吧。
你所遇到的问题主要是子进程终止,而父进程没有进行处理,产生了僵尸进程(Zombie),
即<defunct>。需要函数signal(SIGCHLD,xxx)来扑捉。结构如下:
#include <signal.h>
....

signal(SIGCHLD,sigchld);
while (1) {
if (p_id=fork())==0) {
....
exit(0);
}
else {
...
}
...
kill(p_id, SIGKILL);//这句还要不要,自己看吧
continue;
}

void sigchld(int signo)
{
int status;
while (waitpid(-1,&status,WNOHANG)>0);
return;
}

参数WNOHANG主要是防止阻塞其他运行的子进程。

W.RICHARD STEVENS大师的书都很不错,有空多看看,只可惜大师人已不在了。

少赚不少分啊。

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧