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

关于信令的问题很少.

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

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

解决方法

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

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

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

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

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...