繁体   English   中英

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

[英]different signal handler for thread and process?. Is it possible

关于信令有几个问题。

1)当进程与主线程一起的线程数减少时,并且如果发出信号,哪个线程将停止其处理并继续执行信号处理程序? 是主线程还是主线程以外的线程?

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

信号可以发送到进程或特定线程。 对于发送到进程的信号,只要有至少一个线程未阻塞该信号,便会立即发送该信号;如果有多个这样的线程,则可能会将该信号传递给其中的任何一个(无法预测一)。 对于发送到特定线程的信号,只要该线程没有信号被阻塞,它们就会立即传递。

使用raise函数引发信号会将信号发送到称为raise的线程,而不是整个过程。 由于线程所做的事情而自动生成的信号(例如SIGSEGV SIGFPESIGPIPE )也将传递到该特定线程。

从终端生成的信号( SIGINTSIGTSTPSIGQUIT )被传递到整个过程。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM