SIGSEGV信号处理程序可以从错误的线程而不是一个单独的线程调用吗?

Android上(我也假设在通用Linux上),一个用sigaction设置的信号处理函数在一个单独的线程中调用(可能专门用于信号处理)。 有没有办法注册处理程序callback,以便它在触发信号的同一个线程中执行?

在通用Linux上,默认情况下,信号处理程序不会在单独的线程中调用。 (我怀疑它在Android上是一样的,但我没有看到它)。要在一个单独的线程中处理信号,必须从某个线程中显式调用sigwait(3)来处理信号。 这是一个常见的设置。

相反,默认行为(针对流程指导的信号 )是随机挑选一个现有线程来处理输入信号。 (当然可能有一些一致性,但这是一个实现细节。)

但是,也有线程指向的信号,它们保证在特定的线程中处理。 线程定向信号的例子包括响应硬件异常产生的信号,如SIGSEGVSIGBUSSIGILL等,这些信号将在同一个线程中处理( 意思是没有什么特别的你需要做! )以及发送的信号与pthread_kill(3)到一个特定的线程。

signal(7)手册页(注意章节号)是一个很好的参考。