免费注册 查看新帖 |

Chinaunix

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

进程中多个线程关于信号的处理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-07-24 10:35 |只看该作者 |倒序浏览
LINUX下进程中的线程信号问题

进程A 首先安装一个信号处理过程(void *b(int num)) SIGUSR1的。然后又创建了10个线程,安装了另一个信号处理过程(void *c(int num)),也是SIGUSR1的,此时问题出现了。
当我向这个进程发信号时,谁会收到呢?书上说是这个进程中所有的线程包含主线程都会收到并根据自已的处理函进行处理,但是测试结果确不是这样的,事实上只有一个线程收到。
这是怎么回事?请高手指点,还是代码有问题,如下:

  1. int k=0;
  2. void hello(int num)
  3. {
  4. printf("pid=%d ,tid=%d ,recieve %d \n",getpid(),pthread_self(),num);

  5. }
  6. void show(int num)
  7. {

  8. printf("main recieve %d\n",num);
  9. }
  10. void *run()
  11. {        
  12.         int i;
  13.         printf("start install==%d,tid=%d\n",k,pthread_self());
  14.         signal(10,hello);
  15.         
  16.         printf("end install==%d\n",k++);
  17.         while(1);

  18. }

  19. int main()
  20. {
  21. int i;
  22. int res;
  23. pthread_t td[10];
  24. signal(10,show);
  25.         //InstallSig(10,show);
  26. printf("m7ypid=%d,tid=%d\n",getpid(),pthread_self());
  27.         getchar();

  28. for(i=0;i<10;i++)
  29. {
  30. res=pthread_create(&td[i],NULL,run,NULL);

  31. }

  32.         while(1);
  33. return 0;

  34. }

复制代码

论坛徽章:
0
2 [报告]
发表于 2010-07-24 11:06 |只看该作者
不可能所有的线程包含主线程都会收到,因为信号只发送了一个

论坛徽章:
1
天蝎座
日期:2013-10-23 21:11:03
3 [报告]
发表于 2010-07-24 11:28 |只看该作者
APUE2第12章有讲多线程对信号的响应

论坛徽章:
0
4 [报告]
发表于 2010-07-25 09:01 |只看该作者
当创建线程进行信号处理时,新建线程继承了现有的信号屏蔽字,因为sigwait会解除信号的阻塞状态,,所以只有一个线程可以用于信号的接收,这使得对主线程进行编码时不必担心来自这些信号的中断

论坛徽章:
0
5 [报告]
发表于 2010-07-25 19:55 |只看该作者
线程的信号处理是共享的

论坛徽章:
0
6 [报告]
发表于 2010-07-26 08:46 |只看该作者
如果在终端中 kill -s 10  pid 的时候,信号是发送到进程。书上解释说是,会把这个信号发送到进程中所有线程中也包含主线程。这是怎么回事?这个也是POSIX的要求。
线程信号处理是共享的?
在创线程时,会复制一份到线程中吧,之后可以改这个线程对信号的响应。而主线程也可以有另外的处理。是这样吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP