Chinaunix首页 | 论坛 | 博客
  • 博客访问: 829244
  • 博文数量: 157
  • 博客积分: 542
  • 博客等级: 中士
  • 技术积分: 1696
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-21 20:21
文章分类
文章存档

2017年(1)

2016年(2)

2015年(6)

2014年(42)

2013年(77)

2012年(19)

2011年(10)

分类: LINUX

2013-12-23 14:51:22

信号以前都只是针对process进程来设计的,后续才把它加入到thread线程中。


信号的对象范围,一个是直接作用到进程,一个是直接作用到产生的线程。 比如SIGKILL作用范围是全进程,所以不管发往哪个线程,都会终止一个进程,类似的还有SIGSTOP。
                       
当一个信号被发送到一个多线程的进程(不仅仅只是一个主线程)时,内核会选择该进程中的任意线程来处理该信号,这样做是保证不会出现一个信号被多次执行;当进程中有多个线程设置阻塞后,内核会选择其中一个没有阻塞的线程来进行处理,这里阻塞的线程其实即实现了与这些线程无关,避免被打扰。
                                                                                                                                                                                                    
所以当在多线程中,有信号处理的时候,为了避免信号干扰到本线程的敏感操作(read, send,recv等),一般会采取先阻塞信号,然后处理这些操作,最后放开阻塞,传递出信号,也可以设置系统忽略掉该信号。

信号的“未决”是一种状态,指的是从信号的产生到信号被处理前的这一段时间


阅读(1665) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~