Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1676713
  • 博文数量: 1493
  • 博客积分: 38
  • 博客等级: 民兵
  • 技术积分: 5834
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-19 17:28
文章分类

全部博文(1493)

文章存档

2016年(11)

2015年(38)

2014年(137)

2013年(253)

2012年(1054)

2011年(1)

分类:

2012-07-19 08:48:19

原文地址:多线程信号中断问题 作者:lotus302

问题 Linux移植版本上线后发现本地日志中压缩线程不工作,导致大量本地日志积压,通过gdb切入进程或系统重启时,程序正常
测试环境 Linux localhost.domain 2.6.18-238.el5xen #1 SMP Sun Dec 19 14:42:02 EST 2010 x86_64 x86_64 x86_64 GNU/Linux
Red Hat Enterprise Linux Server release 5.6 (Tikanga)
测试方法 部署环境 主线程: poll=2,执行system()后产生SIGCHLD信号
子线程1:poll=3
子线程2:poll=5
子线程3:poll=7
子线程4:poll=9
主线程: poll=3
子线程1:poll=2,执行system()后产生SIGCHLD信号
子线程2:poll=5
子线程3:poll=7
子线程4:poll=9
线程数为2 现象:子线程收到多数SIGCHLD,主线程收到少数SIGCHLD
影响:子线程dpl_poll过程被中断,无法运行
现象:主线程收到多数SIGCHLD,子线程收到少数SIGCHLD
影响:主线程dpl_poll过程被中断,无法运行
线程数为3 现象:被选中的子线程收到多数SIGCHLD,而主线程收到少数SIGCHLD
影响:被选中的子线程dpl_poll过程被中断,无法运行
现象:被选中的子线程收到多数SIGCHLD,子线程1收到少数SIGCHLD
影响:被选中的子线程dpl_poll过程被中断,无法运行
线程数为4 现象:被选中的子线程收到多数SIGCHLD,主线程收到少数SIGCHLD
影响:被选中的子线程dpl_poll过程被中断,无法运行
现象:被选中的子线程收到多数SIGCHLD,子线程1收到少数SIGCHLD
影响:被选中的子线程dpl_poll过程被中断,无法运行
线程数为5 现象:被选中的子线程收到多数SIGCHLD,主线程收到少数SIGCHLD
影响:被选中的子线程dpl_poll过程被中断,无法运行
现象:被选中的子线程收到多数SIGCHLD,子线程1收到少数SIGCHLD
影响:被选中的子线程dpl_poll过程被中断,无法运行
结论 system函数会产生一个子进程去执行指定命令,执行完成后产生SIGCHLD信号;
多线程环境下,进程信号会随机的发送给产生信号的线程或任意指定的线程;
影响 本地日志系统(arch进程有3个线程:压缩、上传、管理lostfile)
其他进程内使用多线程的系统
修正方法 参见dpl_poll代码
阅读(334) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~