首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SIGSEGV信号处理程序可以从出错的线程而不是单独的线程调用吗?

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

Stack Overflow用户
提问于 2015-04-14 22:30:28
回答 1查看 220关注 0票数 2

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

EN

回答 1

Stack Overflow用户

发布于 2015-04-15 03:28:47

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

相反,缺省行为(针对与进程有关的信号)是“随机”选择一个现有线程来处理传入信号。(当然,它可能有一些一致性,但这是一个实现细节。)

但是,也有线程导向的信号,这些信号保证在特定的线程中处理。线程导向信号的示例包括响应硬件异常而生成的信号,如SIGSEGVSIGBUSSIGILL等,这些信号将在同一个线程中处理(这意味着您不需要做任何特殊的事情!),以及使用pthread_kill(3)发送到特定线程的信号。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29630069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档