There doesn't seem to be any portable way to enumerate the threads in a process.
Linux has pthread_kill_other_threads_np
, which looks like a leftover from the original purely-userland pthreads implementation that may or may not work as documented today. It doesn't tell you how many threads there were.
You can get a lot of information about your process by looking in /proc/self
(or, for other processes, /proc/123
). Although many unices have a file or directory with that name, the layout is completely different, so any code using /proc
will be Linux-specific. The documentation of /proc
is in Documentation/filesystems/proc.txt
in the kernel source. In particular, /proc/self/task
has a subdirectory for each thread. The name of the subdirectory is the LWP id; unfortunately, [1][2][3] there doesn't seem to be a way to associate LWP ids with pthread ids (but you can get your own thread id with gettid(2)
if you work for it). Of course, reading /proc/self/task
is not atomic; the number of threads is available atomically through /proc/self/status
(but of course it might change before you act on it).
If you can't achieve what you want with the limited support you get from Linux pthreads, another tactic is to play dynamic linking tricks to provide your own version of pthread_create
that logs to a data structure you can inspect afterwards.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…