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

标签 c linux multithreading program-counter

线程 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/

相关文章:

c - Linux内核模块tcp连接

wpf - 如果使用Dispatcher.BeginInvoke,则仅通过Invoke使用DataContext.ValueChanged触发不起作用

c - c中的memcpy命令

c - 字符串终止 C/C++ char = 0

linux - 在 linux 中使用 bash 查找文件夹中的所有音频文件

php - 即使在正确的 CFLAGS 之后,也无法在 64 位 linux 机器(AWS EC2 实例)上创建 32 位 php 扩展

r - R 的 fracdiff 软件包无法在 Linux Mint 中安装

c++ - C多线程编程中的文件输入和输出(windows)

java - 尽管对象被锁定,但非同步方法仍然可以访问,为什么?

c - 如何使用SIMD来加速两个内存块的异或?