Chinaunix首页 | 论坛 | 博客
  • 博客访问: 33580
  • 博文数量: 11
  • 博客积分: 271
  • 博客等级: 二等列兵
  • 技术积分: 135
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-16 05:48
文章分类

全部博文(11)

文章存档

2012年(11)

我的朋友

分类: C/C++

2012-07-18 16:48:20

问题 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代码
阅读(1515) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~