是可能的(在C或C ++程序中,在64位英特尔架构的Linux下运行),线程A可以读取线程B的程序计数器寄存器的值,而无需任何特殊的仪器线程B的代码?
(我意识到这是一个奇怪的事情;想要的只是因为我很好奇,如果线程A可以使用它来检测线程B是否卡在一个失败的系统调用中,如here)所述
答案 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)
并将其内核存储在某处。