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

进程处理信号都不陌生,但线程处理信号……,进者有分

    来源: 互联网  发布时间:2015-06-14

    本文导语:  我写线程时,需要在线程之间传递一些消息(就是32个基本消息)。有一些问题很是疑惑。 1、不是明确指定为线程的消息函数如:signal(), sigpause()等,不管在什么地方调用,都影响所有线程。我试了signal(SIGPIPE, SIG_I...

我写线程时,需要在线程之间传递一些消息(就是32个基本消息)。有一些问题很是疑惑。

1、不是明确指定为线程的消息函数如:signal(), sigpause()等,不管在什么地方调用,都影响所有线程。我试了signal(SIGPIPE, SIG_IGN),确实如此。是否所有的信号函数都如此?

2、pthread_sigmask函数只影响本线程的消息,但man帮助中的解释颇为不解:
       Recall  that  signal  masks  are  set on a per-thread basis, but signal
       actions and signal handlers,  as  set  with  sigaction(2),  are  shared
       between all threads.
       是说重调用的话,pthread_sigmask会影响所有线程么?
       
       但sigwait()的定义就感觉有些矛盾了。
       sigwait suspends the calling thread until one of the signals in set  is
       delivered  to the calling thread. It then stores the number of the sig-
       nal received in the location pointed to by sig and returns. The signals
       in  set must be blocked and not ignored on entrance to sigwait.  If the
       delivered signal has a signal handler function attached, that  function
       is not called.
       
       最后一句,应该说消息处理函数不调用,即signal(sig, sigHandleFunc);不起作用。是否sigwait能屏蔽signal函数?
              
       
3、如果一个线程调用过pthread_sigmask,之后外部调用sigprocmask(),是否线程的sig mask就改变了,sigwait的行为不再正确?

3、socket连接关闭时,调用send()会触发SIGPIPE,一般signal(SIGPIPE, SIG_IGN);就可以了。是否还有其他方法避免触发SIGPIPE?请告知。

4、我在main()中调用了signal(SIGPIPE, SIG_IGN),但运行后还能Broke pipe。我定位了一下程序,PQexec()(postgres库的接口函数)调用过后就会出现,注释掉就不会Broke pipe。请问PQexec()改变了SIGPIPE信号的行为吗?其它的postgres库函数有没有改变其他的信号行为呢?

请大家不吝指点,讲解一下线程消息的使用。如果有关线程处理消息的文章或参考,更是感激不尽。

|
1.有些消息是只针对线程有效的吧
2. sigwait的说明好像没有什么矛盾的,线程用了sigwait则信号到达后,就从后面的语句继续执行,即时定义了signal handler,那个handler也不会被调用,signal函数是用来替换handler的,不存在屏蔽不屏蔽的,只是线程执行了sigwait,消息来时,对应的sigHandleFunc就不被调用了

3。线程的sigmask应该没有该变,可是进程的mask被sigprocmask改变了,所以外部进程就不能将信号送入本进程了,更不用说线程
另一个3。不清楚,SIGPIPE触发就触发好了,在handler中不需要处理就可以
4。不清楚

|
1.线程信号我没有研究,不好意思
2、关于如何去掉连接出现PIPE信号的问题,在对socket进行读写操作的接口recv和send中最后一个参数设置为MSG_NOSIGNAL救可以了
如recv(sock, buf, size, MSG_NOSIGNAL);

|
建议看看David R.Butenhof 的《POSIX 多线程程序设计》。

|
伙计 让你失望了
你问的问题 我现在不能一一给你一个明确的答案
现在又在出差 没有时间考究
sorry 
等回去再和大家探讨
再次表示歉意

帮你UP

|
up

|
学习

|
OK

|
学习!!!
现在我也在研究这个东西
up

    
 
 

您可能感兴趣的文章:

  • 【求助】linux/Unix下创建子进程,向父进程发送信号,子进程也能收到改信号,此时如何让子进程不收到信号
  • linux进程(线程)运行过程中如何获取本进程当前的内存使用状况,统计信息? iis7站长之家
  • 如何实现子进程根据父进程的信号来确定是否终止子进程???
  • 非进程所有者如何向该进程发送信号
  • 一个进程可以屏蔽另一个进程对信号的响应吗?
  • 信号灯同步2个进程,一个进程如何主动给另一个进程发送通知?
  • 如何确定信号的来源?即如何知道接收到的信号来自于哪一个进程号?
  • 子进程为什么没有继承父进程的信号
  • 父进程与子进程的信号屏蔽表可以不一样吗?
  • 请教关于Kill向子进程发送信号的问题,子进程如何相应信号,为什么子进程接受不到。
  • 书上说,中断用自旋锁,进程,用信号量,但是,为什么中断不能用信号量?
  • 学习linux的新手问:linux进程信号掩码以及信号阻塞与信号未决怎么理解?
  • 新手提问:父进程结束时子进程会得到什么样的从系统发来的信号?
  • 生产者消费者问题为什么不可以共用一个信号量,如果这个信号量可以设置取值固定为0到N,即当信号量取值为N的时候阻塞进程,是否也可以?
  • 【求助】多进程中 内核信号量无效?
  • linux中 关于 进程和信号的问题
  • 进程间信号通信问题
  • 守护进程为什么要忽略SIGHUP信号呢?
  • 如何向由fork出来的进程家族发送信号?
  • 某daemon进程运行一段时间后接受到不知何地的终止信号导致进程退出,何解?
  • 一个进程首先监听一个端口,等到有连接了就新开一个进程,让新进程来处理后面的通讯。请问母进程中已经打开了端口,子进程怎么来使用同一
  • Linux守护进程 的子进程 终端处理
  • 我要实现当进程打开文件时,根据文件名判断是否符合要求,符合后处理文件,再把文件返回给进程,怎么实现啊
  • Linux,aix,windows下可以查询非本进程的信号处理函数吗?
  • 请问:进程创建的线程是怎样运行的啊,线程的处理函数运行完了,线程就退出了吗?
  • 进程僵死掉怎么处理?答者均有分!
  • 请问:signal(), sigaction()函数会不会使自已所有的进程挂起啊,(这样就等接收各种信号,进行一些处理工作啊)
  • 在linux中,中断处理是否作为单独的进程执行?
  • 有一个进程死循环了,使系统反应变慢,怎么把它找出来并处理?
  • 问专家们 一个问题,为什么在中断嵌套过程中或者中断处理过程中不能发生进程的调度?
  • 关于进程对信号的处理
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 主进程有两个线程,fork子进程后复制主进程两个线程的内存么?
  • 如何实现这样的API,可同时被不同的进程/线程使用,但是又不区分进程/线程?
  • 如果父进程有多个线程,那么它的子进程也该拥有这些线程
  • 一个进程创建了两个线程,如何使得当任何一个线程(比如线程a)结束时,同时也结束线程b,也就是使两个线程一起死掉,怎么办呢?
  • 如何让子进程继承父进程的线程
  • 请问,在一个进程中创建多线程时如何能避免不同的线程获得同一个线程标识
  • 在一个进程的主线程中如何判断自己创建的线程是否存在?
  • Linux中最多同时可以开多少个进程,一个进程可以开多少个线程?
  • 请教:线程中调用一个阻塞的方法后,进程及其它线程会阻塞么?
  • 请问在单进程,多线程程序里,线程间使用IPC的信号量来同步,能行吗?
  • linux线程与进程的问题
  • 在程序中启动一个进程(不是线程),如何知道该进程已运行结束
  • 如何准确理解“程序”、“进程”、“线程”这三个概念
  • 进程和线程的区别
  • 请问:linux下的子进程与线程的区别
  • linux进程(线程)运行过程中如何获取本进程当前的内存使用状况,统计信息?
  • socket+多进程+多线程
  • sleep是进程域还是线程域的?
  • 线程上下文切换和进程上下文切换那个代价大?
  • linux的线程是由进程模拟的吗?求教。
  • linux僵尸(zombie)进程介绍及清除
  • 进程Afork进程B,进程Bfor进程C,如果进程C退出发出SIGCHLD,A进程是否可以收到
  • Ubuntu查看内存,进程相关命令介绍
  • 如果一个server进程要fork许多子进程,但不等待子进程终止,也不希望子进程结束后处于僵进程状态直到父进程终止。请问可采用什么方法实现
  • linux下进程占用内存空间详解
  • 在多进程中父进程frok子进程,怎样让子进程自举,脱离父进程,而且父进程不退出
  • Linux进程的内核栈和用户栈概念,相互关系及切换过程
  • fock()开出的子进程的进程ID是否进程ID都大于父进程的?
  • android 4.0 托管进程介绍及优先级和回收机制
  • 父进程等待子进程n秒,如果子进程正常退出,父进程立即继续向下执行,如果子出现进程故障一直不退出,父进程等待n秒后继续向下执行,请问
  • linux下进程间通信:共享内存原理及具体用法举例(基于c/c++语言)


  • 站内导航:


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

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

    浙ICP备11055608号-3