免费注册 查看新帖 |

Chinaunix

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

[Linux] signal函数发送的信号,究竟是发给了一个进程还是发送给了某个线程? [复制链接]

论坛徽章:
2
2015年迎新春徽章
日期:2015-03-04 10:16:532015元宵节徽章
日期:2015-03-06 15:53:22
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-02-06 16:43 |只看该作者 |倒序浏览
如题,apue上面的讨论,信号这一章都是针对"作业"而言,我认为这里的所谓"作业"指的是"进程"的概念。
但是我在linux上面做各种测试,man各种signal函数的时候,发现帮助页面里面主要都是说的各种和线程相关的内容,如下:

  1. SIGPROCMASK(2)             Linux Programmer's Manual            SIGPROCMASK(2)

  2. NAME
  3.        sigprocmask - examine and change blocked signals

  4. SYNOPSIS
  5.        #include <signal.h>

  6.        int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);

  7.    Feature Test Macro Requirements for glibc (see feature_test_macros(7)):

  8.        sigprocmask(): _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_SOURCE

  9. DESCRIPTION
  10.        sigprocmask()  is  used  to  fetch and/or change the signal mask of the
  11.        calling thread.  The signal mask is the set of signals  whose  delivery
  12.        is  currently  blocked  for  the  caller  (see  also signal(7) for more
  13.        details).
复制代码
我就疑惑了。在unix诞生的早期,没有问题,只有进程的概念。但是现在的系统都支持pthread了,那么我发送一个signal给一个进程,是这个进程的所有线程都会处理呢还是某个线程才会处理?
还是说,要区分是安全的信号(发给某个线程)和不安全的信号(发给某个随机的线程)?

因为信号这一章的内容,讨论了安全的信号和非安全的信号。我想问:信号是不是也要分进程的信号还是线程的信号呢?
如果能知道signal的机制在linux内部实现的机理是什么样的,也许我会更好的理解这个问题。但是我没研究过内核的实现。所以还望各位大侠指教!

论坛徽章:
6
2015年迎新春徽章
日期:2015-03-04 10:16:53操作系统版块每日发帖之星
日期:2015-08-04 06:20:002015亚冠之鹿岛鹿角
日期:2015-08-05 16:51:182015亚冠之全北现代
日期:2015-08-07 17:14:392015亚冠之武里南联
日期:2015-08-11 15:33:03数据库技术版块每日发帖之星
日期:2016-02-02 06:20:00
2 [报告]
发表于 2015-02-06 19:25 |只看该作者
apue的后续章节线程中讲到了线程中的信号。
线程中的信号是这样处理的:
并不是用信号处理程序来处理信号,而是用专门的独立控制线程来进行信号处理
首先所有线程都对信号进行屏蔽,然后专门处理信号的线程调用sigwait函数解除信号阻塞并休眠
这样就只有一个线程可用于信号的接收

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:57:09
3 [报告]
发表于 2015-02-06 19:49 |只看该作者
我记得是调度到哪个线程时收到了信号,就由哪个线程处理。
线程和进程都有mask位图,但是只有进程有padding位图。
无论在哪个线程中定义信号处理函数都是一样的,后设置的线程会覆盖先设置的线程的设置。子线程会继承父线程设置的mask位图(严格来讲线程是不分父子的,进程才分父子),但是可以通过子线程重新设置mask位图的方式来实现把特定信号指定给某个线程来处理的效果。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP