在Android上(我也假设在通用Linux上),一个用sigaction
设置的信号处理函数在一个单独的线程中调用(可能专门用于信号处理)。 有没有办法注册处理程序callback,以便它在触发信号的同一个线程中执行?
在通用Linux上,默认情况下,信号处理程序不会在单独的线程中调用。 (我怀疑它在Android上是一样的,但我没有看到它)。要在一个单独的线程中处理信号,必须从某个线程中显式调用sigwait(3)
来处理信号。 这是一个常见的设置。
相反,默认行为(针对流程指导的信号 )是随机挑选一个现有线程来处理输入信号。 (当然可能有一些一致性,但这是一个实现细节。)
但是,也有线程指向的信号,它们保证在特定的线程中处理。 线程定向信号的例子包括响应硬件异常产生的信号,如SIGSEGV
, SIGBUS
, SIGILL
等,这些信号将在同一个线程中处理( 意思是没有什么特别的你需要做! )以及发送的信号与pthread_kill(3)
到一个特定的线程。
signal(7)
手册页(注意章节号)是一个很好的参考。