当前位置:  技术问答>linux和unix

有关linux信号问题

    来源: 互联网  发布时间:2016-10-25

    本文导语:  #include..... ............. sigset_t oldmask,mask; void func(int); void *thr_func(void *arg) {       pthread_sigmask(SIG_BLOCK,&mask,&oldmask);       signal(SIGINT,func); } void func(int signo) {       pintf("SIGINT recieved\n");...

#include.....
.............
sigset_t oldmask,mask;
void func(int);
void *thr_func(void *arg)
{
      pthread_sigmask(SIG_BLOCK,&mask,&oldmask);
      signal(SIGINT,func);
}
void func(int signo)
{
      pintf("SIGINT recieved\n");
}
int main(void)
{
     pthread_t tid;
     sigemptyset(&mask);
     sigaddset(&mask,SIGINT);
     pthread_create(&tid,NULL,thr_func,NULL);
     sleep(20);
     exit(0);
}
疑问:1为什么按ctrl-c中断信号(时线程还能收到,并执行信号处理,不是已经被 pthread_sigmask(SIG_BLOCK,&mask,&oldmask);阻塞了吗?


|
补充说明

1. 默认情况下,信号将由主进程接收处理,就算信号处理函数是由子线程注册的

2. 每个线程均有自己的信号屏蔽字,可以使用sigprocmask函数来屏蔽某个线程对该信号的响应处理,
   仅留下需要处理该信号的线程来处理指定的信号。

3. 对某个信号处理函数,以程序执行时最后一次注册的处理函数为准,即在所有的线程里,
   同一个信号在任何线程里对该信号的处理一定相同

|
对于线程来说,信号屏蔽字是私有的,而信号处理程序时共享的。
产生的大部分信号会被任意递送到一个线程。

|

默认情况下,信号派发给某个活动并且不阻塞信号的线程。LZ的这个工作线程的确是阻塞了,但是主线程没有。因此,派发给主线程。

线程修改自己的信号mask用pthread_sigmask()

多线程环境下,对信号的处理,与单线程环境下的处理,方式不同。建议的方式是,将所有需要处理的信号,集中在某“一”个线程处理,用sigwait(),做到单一处处理。而其他线程,都阻塞这些信号。由于信号只会派发给不阻塞的线程,因此,感觉上就象是堵住所有的路,只留下唯一的路让水流走。惯例上,会在主线程进行阻塞信号的工作,然后创建工作线程,工作线程在创建时,继承了主线程的屏蔽字。如此做到“堵住”。其中,某个工作线程调用sigwait()来等待特定的信号集合。

总的说,信号在多线程下编程,需要重新考虑,与以往的单线程程序不同。

|

我的确认为pthread_sigmask()在非主线程中,没有什么调用的必要。如果按照推荐的模式去写程序,处理信号的话。

    
 
 

您可能感兴趣的文章:

  • 有关信号的几个问题
  • 有关信号传递问题
  • 有关信号的问题
  • Linux信号机制有关问题
  • 有关进程,信号的问题,向各位大虾求教。。。
  • 请教一个有关信号的问题
  • 求教有关smartupload的问题,有关就给分!!
  • 有关在sco unix5.0.4下有关网卡设置的问题(非常急,高分相送)
  • 有关snmp的一个很菜,但是困扰了我很久的问题,有关工作原理的,望大家赐教
  • 有关ResultSet的问题,帮助解决问题者另外加分...
  • (菜鸟问题)有关目录中文件执行的问题???
  • 有关Qt下编译的环境问题
  • 有关裁减内核及shell命令的问题
  • 有关cocoon的问题??
  • Helper! 有关Jbuilder使用问题???
  • 有关swing的问题,请高手回答
  • 一个有关分数的问题
  • 有关pcmaclan的打印机共享问题
  • 请教有关samba共享名大小写的问题
  • 想看一下吗?有关swing 组件的问题?
  • CSS属性参考手册 iis7站长之家
  • 有关jsp服务器的一个问题
  • java 进阶级问题,有关网络的问题,请多多帮助
  • 有关Liunx 的最低配置问题
  • 有关环境的问题
  • 请教有关konqueror 问题?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • ​有关Docker的八个令人难以置信的事实
  • 有关内码转换(跟HttpServletRequest有关)
  • 求有关png图像处理的libpng库的有关中文资料
  • 大家推荐一下有关LINUX7有关的网络编程的书。最好是比较全面的!比较经典的。
  • 有关KDevelop-3.0.4-0.1.i386.rpm的有关软件包
  • 有关KDevelop编程的资料
  • 有关集群与数据同步
  • 请教有关英文简历方面的词句!
  • 有关报表打印(在JAVA,WEB下应用)急用!
  • 请各位大哥告知JAVA中消息机制的有关资料,拜托!
  • 有关jbuilder
  • 我想看看有关Linux和Unix的源码,有什么好的建议
  • 有关J2ME的帮助文档!
  • 100分求助 能不能提供一些有关图像分割的算法和实现代码!谢谢
  • 在哪里可以弄到有关tomcat配置方面的资料?
  • 请问哪里有jboss有关配置的教程,最好是中文的,先谢了
  • 哪位兄弟知道有关QT的资料可以下,,谢谢!
  • 有关学习java的电子图书网址
  • 请介绍一本有关i386体系结构、汇编的书。
  • 有关shell返回值
  • 高分请教:请问怎么才能得到最近所有有关文件操作(新建,删除等)的记录


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3