Is there a sane way to map a
pthread_t value (as returned from
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
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
One (convoluted, non-portable, Linux-specific, lightly destructive) method of mapping
tid without looking into
struct pthread is as follows:
pthread_setname_npto set a thread name to something unique.
- Iterate over subdirectories of
/proc/self/taskand read a line from a file named
commin each of those.
- If the line equals to the unique string just used, extract
tidfrom 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).