我在Linux上有一个多线程的程序。有一些特定的内存区域,我有兴趣查看它们是否在特定的时间段内被写入。为此,我只提供对这些内存页的读访问权限,并为SIGSEGV安装一个信号处理程序。现在我的问题是,每个线程会为自己调用信号处理程序吗?假设线程1写入一些禁止的内存区,它会执行信号处理程序吗?
发布于 2011-06-30 18:32:31
首先,
信号处理是在进程范围内进行的;进程中的所有线程对每个信号都共享相同的处理。如果一个线程使用sigaction()为SIGINT建立处理程序,那么可以从SIGINT被传递到的任何线程调用该处理程序。
但请继续阅读
信号可以指向整个进程,也可以指向特定的线程。在以下情况下,信号是线程定向的
它是作为在线程(SIGBUS, SIGFPE, SIGILL, and SIGSEGV)的上下文中执行特定硬件指令的直接结果而生成的
我引用了TLPI的话。
发布于 2011-06-30 18:30:50
不是,根据题目。
对于问题正文:对于您要求的特定信号,是(否则:视情况而定)。导致段错误的线程将接收该信号。
请参阅signal(7)
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 [...].https://stackoverflow.com/questions/6533373
复制相似问题