首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否将SIGSEGV发送到每个线程?

是否将SIGSEGV发送到每个线程?
EN

Stack Overflow用户
提问于 2011-06-30 18:27:21
回答 2查看 5.8K关注 0票数 18

我在Linux上有一个多线程的程序。有一些特定的内存区域,我有兴趣查看它们是否在特定的时间段内被写入。为此,我只提供对这些内存页的读访问权限,并为SIGSEGV安装一个信号处理程序。现在我的问题是,每个线程会为自己调用信号处理程序吗?假设线程1写入一些禁止的内存区,它会执行信号处理程序吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-30 18:32:31

首先,

信号处理是在进程范围内进行的;进程中的所有线程对每个信号都共享相同的处理。如果一个线程使用sigaction()为SIGINT建立处理程序,那么可以从SIGINT被传递到的任何线程调用该处理程序。

但请继续阅读

信号可以指向整个进程,也可以指向特定的线程。在以下情况下,信号是线程定向的

它是作为在线程(SIGBUS, SIGFPE, SIGILL, and SIGSEGV)的上下文中执行特定硬件指令的直接结果而生成的

我引用了TLPI的话。

票数 26
EN

Stack Overflow用户

发布于 2011-06-30 18:30:50

不是,根据题目。

对于问题正文:对于您要求的特定信号,是(否则:视情况而定)。导致段错误的线程将接收该信号。

请参阅signal(7)

代码语言:javascript
复制
A signal may be generated (and thus pending) for a process as a whole (e.g.,
when sent using kill(2)) or for a specific thread (e.g., certain signals, such
as SIGSEGV and SIGFPE, generated as a consequence of executing a specific
machine-language instruction are thread directed [...].
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6533373

复制
相关文章

相似问题

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