我有一个10+线程的系统。我有一个信号处理程序来捕获SIGSEGV。如果一个线程生成SIGSEGV,该信号是发送到所有线程,还是只发送到生成信号的线程?
答案 0 :(得分:7)
SIGSEGV
是同步信号。它将被传递给导致无效内存访问的线程。来自signal(7)
:
可以为整个过程生成(并因此待决)信号(例如, 当使用kill(2)
)或特定线程(例如,某些信号,例如, 作为执行特定结果而生成的SIGSEGV
和SIGFPE
机器语言指令是线程指向的,以及针对a的信号 使用pthread_kill(3)
)的特定线程。过程导向信号可以是 传递给当前没有信号的任何一个线程 受阻。如果多个线程的信号未被阻塞,那么 内核选择一个任意线程来传递信号。