【发布时间】:2015-07-17 07:07:09
【问题描述】:
线程 A 可以读取线程 B 的程序计数器寄存器的值(在 C 或 C++ 程序中,在 64 位 Intel 架构的 Linux 下运行),而无需对线程 B 的代码进行任何特殊检测?
(我意识到这是一件奇怪的事情;这个愿望只是因为我很好奇线程 A 是否可以使用它来检测线程 B 是否陷入失败的系统调用,如 here 所述)
【问题讨论】:
标签: c linux multithreading program-counter
线程 A 可以读取线程 B 的程序计数器寄存器的值(在 C 或 C++ 程序中,在 64 位 Intel 架构的 Linux 下运行),而无需对线程 B 的代码进行任何特殊检测?
(我意识到这是一件奇怪的事情;这个愿望只是因为我很好奇线程 A 是否可以使用它来检测线程 B 是否陷入失败的系统调用,如 here 所述)
【问题讨论】:
标签: c linux multithreading program-counter
在 Linux 上,/proc/self/task/%d/stat 的第 30 字段,其中%d 需要填写相关线程的内核 tid,其中包含线程的最后观察到的指令指针值。请参阅http://man7.org/linux/man-pages/man5/proc.5.html 并注意它记录在/proc/[pid]/stat 下,但当前进程下task 目录中的版本是您想要针对线程的版本。
困难的部分可能是获取线程的内核 tid。最简单的方法是从线程调用syscall(SYS_gettid) 并将其内核 tid 存储在某处。
【讨论】: