线程 A 可以(在 C 或 C++ 程序中,在 64 位 Intel 架构的 Linux 下运行)读取线程 B 的程序计数器寄存器的值,而不需要对线程 B 的代码进行任何特殊检测?
(我意识到这是一件奇怪的事情;这种愿望之所以出现,是因为我很好奇线程 A 是否可以使用它来检测线程 B 是否陷入了失败的系统调用中,如所述 here )
最佳答案
在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 存储在某处。
关于c - 是否可以读取另一个线程的程序计数器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30088710/