unix编程如何消灭僵尸“defunct”?

zyonok 2002-04-24 09:32:04
unix网络编程。父进程调用accept,然后调用fork。接着子进程读写已连接套接口,处理完成父进程关闭已连接套接口。然而这个过程没做一次都会产生一个defunct.在父进程调用accept前用“signal(SIGCHLD,sig_chld);好像也不能解决问题。
void sig_chld(int signo)
{ 。。。
while( (pid = waitpid( -1, &stat, WNOHANG ) ) > 0 )
;
。。。
}
先谢了!!!
...全文
234 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
summers 2002-04-25
  • 打赏
  • 举报
回复
void sigchld_handler(int signo)
{
pid_t pid;
int status;
while((pid = waitpid(-1, &status, WNOHANG)) > 0) {}
return;
}


在主程序中执行
struct sigaction act;


act.sa_handler = sigchld_handler;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
if (sigaction(SIGCHLD, &act, NULL) < 0)
{
perror("sigaction error \n");
exit(1);
}
wake2000 2002-04-25
  • 打赏
  • 举报
回复
signal( SIGCLD, SIG_IGN );
signal( SIGCHLD, SIG_IGN );
直接将子进程的忽略掉试试。

19,612

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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