2010-12-15 82 views
3

我有一个系统有10多个线程。我有一个信号处理程序来捕获SIGSEGV。如果一个线程生成SIGSEGV,那么这个信号会传递给所有线程,还是传递给产生信号的线程呢?POSIX线程和SIGSEGV

回答

7

SIGSEGV是同步信号。它将被传递到导致无效内存访问的线程。从signal(7)

可以产生的信号(以及因此待处理),用于处理作为一个整体(例如, 使用 kill(2)时发送)或为一个特定的线程(例如,某些信号,例如 如 SIGSEGVSIGFPE,由于执行特定的机器语言指令而生成的结果是针对线程的,因为针对使用 pthread_kill(3)的特定线程的信号是针对的。处理指向的信号可以是 传递给当前没有信号被阻挡的任何一个线程。如果不止一个线程的信号被解除阻塞,那么内核将选择一个任意线程来传送信号。
+2

谢谢。这个措词不在MacOS X信号文档中。 – vy32 2010-12-16 05:06:43