一尘不染

SIGSEGV是否传递到每个线程?

linux

我在Linux中有一个多线程程序。我想在某些内存区域中查看它们是否已在特定时间段内写入。为此,我仅授予对这些内存页面的读取访问权限,并为SIGSEGV安装信号处理程序。现在我的问题是,每个线程都会自己调用信号处理程序。假设线程1写入某个禁止的内存区域,它是执行信号处理程序的区域吗?


阅读 213

收藏
2020-06-03

共1个答案

一尘不染

首先

信号处理是全过程的;进程中的所有线程对于每个信号共享相同的配置。如果一个线程使用sigaction()为SIGINT建立处理程序,则可以从SIGINT传递到的任何线程中调用该处理程序。

但是请继续阅读

信号既可以指向整个进程,也可以指向特定线程 。如果信号是线程导向的

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

我从引用TLPI

2020-06-03