【发布时间】:2018-05-28 18:20:38
【问题描述】:
在 Linux 中,有没有一种健全的方法可以将 pthread_t 值(从 pthread_create() 或 std::thread::native_hanle() 返回)映射到 pid(tid)?在某人变得重复快乐之前,这不是关于查找线程自己的 pid(可以通过 gettid() 完成)。
疯狂的方法是强制线程调用gettid() 并传递结果,但这太麻烦了。
我想到的可能应用之一是将程序中创建的线程(pthread_t 可用)与ps -T 提供的输出相协调。
【问题讨论】:
-
据我所知,在linux中,
pthread_t是一个指向struct pthread的指针,它有一个tid成员。但我不知道任何可接受的方式来阅读这些信息。如果你有可用的调试符号,你可以在 gdb 中使用ptype pthread检出这个结构。仅出于调试目的,您可以使用p &((pthread*)0)->tid读取tid的偏移量,然后在程序本身中使用此偏移量从pthread_t读取tid。或者您可以使用一些矮人阅读器库从符号文件本身读取偏移量,以实现“便携”。 -
@geza 确实很有趣,感谢您提供这些信息!
-
这取决于线程的底层实现。 linuxthreads 可能有与之关联的进程 ID,
getpid应该返回它。 posix 线程可能不会,所以getpid将返回主进程的 pid。检查这个:stackoverflow.com/a/19677227/1143850 -
@n.m.你的回答提供了一个很好的多样性,从“你不能这样做,因为 pthreads 不是 Linux 线程”作为共识非回答。