是否可以阅读另一个线程的程序计数器?

时间:2015-05-06 22:22:01

标签: c linux multithreading program-counter

是可能的(在C或C ++程序中,在64位英特尔架构的Linux下运行),线程A可以读取线程B的程序计数器寄存器的值,而无需任何特殊的仪器线程B的代码?

(我意识到这是一个奇怪的事情;想要的只是因为我很好奇,如果线程A可以使用它来检测线程B是否卡在一个失败的系统调用中,如here)所述

1 个答案:

答案 0 :(得分:3)

在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)并将其内核存储在某处。