微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

线程和进程的不同信号处理程序?可能吗

关于信令的问题很少.

1)当进程与主线程一起有更多线程时,如果信号被提出,哪个线程将停止其处理并继续使用信号处理程序?它是主线程还是主线程以外的?

2)是否可以为主线程和特定线程之间的相同信号保留不同的处理程序?

解决方法

信号可以发送到进程或特定线程.对于发送到进程的信号,一旦至少有一个线程没有阻塞该信号,就会传递信号,如果有多个这样的线程,它可能被传递给它们中的任何一个(不可预测的一).对于发送到特定线程的信号,只要该线程没有阻塞信号,就会传递它们.

使用raise函数引发信号将信号发送到调用raise的线程,而不是整个进程.由于线程所做的事情而自动生成的信号(如SIGSEGV SIGFPE和SIGPIPE)也会传递给该特定线程.

从终端生成的信号(SIGINT,SIGTSTP,SIGQUIT)被传递到整个过程.

没有办法为每个线程安装单独的信号处理程序,但信号的信号处理程序可能能够检查它正在运行的线程.如果你知道信号没有中断async-signal-unsafe函数,你可以调用pthread_self获取当前线程ID.否则,一个丑陋但安全的方法获取errno的地址并根据它查找您所在的线程(您必须自己保留映射表并确保对此表的访问是异步信号安全的).

原文地址:https://www.jb51.cc/c/116518.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐