Is there a sane way to map a pthread_t
value (as returned from pthread_create()
or std::thread::native_hanle()
) to pid(tid) in Linux? Before someone gets duplicate-happy, this is not about finding thread's own pid (which can be done with gettid()
).
The insane way would be to somehow compel a thread to call gettid()
and pass along the result, but that's way too much trouble.
One of the possible applications I have in mind is to reconcile threads created within program (where pthread_t
is available) with output provided by ps -T
.
One (convoluted, non-portable, Linux-specific, lightly destructive) method of mapping pthread_t
to tid
without looking into struct pthread
is as follows:
pthread_setname_np
to set a thread name to something unique./proc/self/task
and read a line from a file named comm
in each of those.tid
from the last component of the subdirectory name. This is your answer. The thread name is not used by the OS for anything, so it should be safe to change it. Nevertheless you probably want to set it back to the value it had originally (use pthread_getname_np
to obtain it).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With