pthread_t 其实是一个结构体指针,里面包含了 TID 和 PID,找出它的偏移量就行。在 Ubuntu 16.04.3 x64上测试通过。
int get_tid_from_pthread(pthread_t t)
{
struct pthread_fake {
void *nothing[90];
pid_t tid;
};
struct pthread_fake* f = (struct pthread_fake*)t;
return f->tid;
}
int get_pid_from_pthread(pthread_t t)
{
struct pthread_fake {
void *nothing[90];
pid_t tid;
pid_t pid;
};
struct pthread_fake* f = (struct pthread_fake*)t;
return f->pid;
}