LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1196|回复: 4

多线程程序对信号的处理,如何让某个线程处理该信号而其他的线程忽略???

[复制链接]
发表于 2006-8-1 11:20:02 | 显示全部楼层 |阅读模式
如题,在我现在的程序中,当在某线程中放置了信号处理函数后,当需要的信号到达时,发现所有的线程都会收到信号且都调用那个信号处理函数。
如何让某个(最好是放置处理函数的那个)线程处理该信号而其他的线程忽略???
望高手赐教,小弟先谢了:)
 楼主| 发表于 2006-8-1 19:41:29 | 显示全部楼层
UNIX用pthread_sigmask()可以给线程设置阻塞信号集,但我在linux下却不行:(

我在程序中用pkill命令给程序发信号后,所有的线程都收到了信号(是应该向所有的线程发送,因为它们都有pid),但某个线程自己设置的掩码却没有用(不能阻塞指定的信号,用sigprocmask就可以,但是它会改变所有线程的掩码)!!
哪位高手知道怎么解决??
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-1 19:43:18 | 显示全部楼层
upupup
回复 支持 反对

使用道具 举报

发表于 2006-8-1 22:47:42 | 显示全部楼层
Post by savage_gan
如题,在我现在的程序中,当在某线程中放置了信号处理函数后,当需要的信号到达时,发现所有的线程都会收到信号且都调用那个信号处理函数。
如何让某个(最好是放置处理函数的那个)线程处理该信号而其他的线程忽略???
望高手赐教,小弟先谢了:)


假如说线程在10个,当收到信号时,所有线程都调用了一次信号处理函数,即一共执行了10次

信号处理函数!!

这种情况个人感觉应该不会发生!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-2 19:51:34 | 显示全部楼层
应该会发生啊,这(共用信号处理函数)是线程处理信号的机制啊
问题是现在用pthread_sigmask()阻塞信号却会影响到所有线程(这按理是不应该的)。
包括用sigwait等都会影响。
linux内核会自动给各个线程分配pid,也早听说linux对posix多线程支持不好,不知道这是不是一个例子:(
这样只有用土方法解决了……
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表