免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6359 | 回复: 2
打印 上一主题 下一主题

关于SIGCHLD信号 [复制链接]

论坛徽章:
3
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-21 16:32 |只看该作者 |倒序浏览
程序描述:典型的进程池服务程序,父进程捕获子进程终止(主要是异常终止),进行善后处理。
    已经设置除SIGALRM以外的信号外中断的系统调用都能自动重启。
    另外也测试过手工重启和BLOCK信号,同样出现问题,请大家帮忙分析一下。

环境:    SUSE Linux Enterprise Server 9
                 gcc version 3.3.3 (SuSE Linux)
测试:
    大量客户端并发请求处理,服务程序调度子进程处理,子进程模拟异常退出,服务进程进行动态调度。

出现的问题:
    用测试程序大量并发处理结束时,服务程序会出现不定个数的僵尸子进程。
    日志显示,僵尸进程的日志都未出现,好像SIGCHLD信号丢失了一样。


  1. static void sigchld(int sig)
  2. {
  3. pid_t        pid;
  4. int                status;

  5.         if ( (pid=waitpid(0,&status,0))<=0 )
  6.         {
  7.                 // 此处打印日志,结果僵尸进程的没有出现
  8.                 return        ;
  9.         }

  10.         // 此处打印日志,结果僵尸进程的没有出现

  11.         // 根据pid进行处理
  12.         ....
  13. }
复制代码

论坛徽章:
0
2 [报告]
发表于 2007-08-21 16:41 |只看该作者
原来有帖子讨论过了。请查找

SIGCHLD信号可以丢失

void sigchld()
{
  int wstat, pid, i;
  while ((pid = wait_nohang(&wstat)) > 0) {
   
    if (numchildren) --numchildren; printstatus("quit");
  }
}

论坛徽章:
0
3 [报告]
发表于 2007-08-21 16:48 |只看该作者
SIGCHLD信号与waitpid()没有什么关系.
下面这个贴子讨论过了.
http://bbs.chinaunix.net/thread-828942-1-1.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP