在Android上(我也假设在通用Linux上),在单独的线程中调用一个带有sigaction
的信号处理函数(可能专门用于信号处理)。有没有办法注册处理程序回调,以便它在触发信号的同一个线程中执行?
答案 0 :(得分:3)
在通用Linux上,默认情况下,信号处理程序不在单独的线程中调用。 (我怀疑它在Android上是一样的,但我还没有调查它。)要在一个单独的线程中处理信号,你必须从你想要的某个线程显式调用sigwait(3)
处理信号。这是一种常见的设置。
相反,默认行为(对于过程导向信号)是选择现有线程"随机"处理输入信号。 (当然,它可能有一些一致性,但这是一个实现细节。)
但是,还有线程导向的信号,这些信号保证在特定线程中处理。线程导向信号的示例包括响应硬件异常而生成的信号,如SIGSEGV
,SIGBUS
,SIGILL
等,它们将在同一线程中处理(含义你需要做什么特别的事情!),以及用pthread_kill(3)
发送到特定线程的信号。
signal(7)
手册页(注意节号)是一个很好的参考。