在Android上(我假设在通用Linux上也是如此),使用sigaction设置的信号处理函数是在一个单独的线程中调用的(可能专门用于信号处理)。有没有办法注册处理程序回调,使其在触发信号的同一线程中执行?
发布于 2015-04-15 03:28:47
在通用Linux上,默认情况下不会在单独的线程中调用信号处理程序。(我怀疑Android上也是这样,但我还没有调查过。)要在单独的线程中处理信号,必须从要处理信号的某个线程显式调用sigwait(3)。这是一个常见的设置。
相反,缺省行为(针对与进程有关的信号)是“随机”选择一个现有线程来处理传入信号。(当然,它可能有一些一致性,但这是一个实现细节。)
但是,也有线程导向的信号,这些信号保证在特定的线程中处理。线程导向信号的示例包括响应硬件异常而生成的信号,如SIGSEGV、SIGBUS、SIGILL等,这些信号将在同一个线程中处理(这意味着您不需要做任何特殊的事情!),以及使用pthread_kill(3)发送到特定线程的信号。
signal(7)手册页(请注意章节编号)是一个很好的参考资料。
https://stackoverflow.com/questions/29630069
复制相似问题