I tried googling it, but I can't find it. I am looking for:
number of threads in process X
total number of threads running currently
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It only takes a minute to sign up.
Sign up to join this communityTo get the number of threads for a given pid:
ps -o nlwp <pid>
To the get the sum of all threads running in the system:
ps -eo nlwp | tail -n +2 | awk '{ num_threads += $1 } END { print num_threads }'
ps h -o nlwp $pid
ps -eLf | wc -l
Feb 9 at 23:32
For finding the number of threads running a single process you can look at /proc/<pid>/status
. It should list the number of threads as one of the fields.
I'm basing this answer around ps axms
. ps
is a great tool for listing what's running.
If you want to filter that by a process, you could try something like this:
echo $(( `ps axms | grep firefox | wc -l` - 1))
We subtract 1 because grep will show in that list.
For all threads in general this should work:
echo $(( `ps axms | wc -l` - 1))
We subtract one this time because there is a header row.
On linux specifically, here is one way to do it per-process:
#!/bin/sh
while read name val; do
if [ "$name" = Threads: ]; then
printf %s\\n "$val"
break
fi
done < /proc/"$1"/status
You may then invoke this script with a PID as an argument, and it will report the number of threads owned by that process.
To get the thread count for the whole system, this suffices:
#!/bin/sh
count() {
printf %s\\n "$#"
}
count /proc/[0-9]*/task/[0-9]*
These approaches may seem a little unorthodox in that they rely heavily on shell features, but in return both of them are faster than the corresponding ps
and awk
-based approaches on my machine (while also not creating extra threads of their own for pipes). Bear in mind that the shell launched to run these scripts will have a thread of its own (or more, if you are using a strange implementation).
To get the total number of the threads(tiny pieces of a process running simultaneously) of a you can use the command ps -o nlwp <pid>
It works all the time.
But if you prefer to try to see it through a file. you should probably look at the files that were created for each and every process of the system. There you can get the ultimate details of the process. For each and every process, there is a folder created in /proc/<pid>
there you can see all the other details also.
In my case it was useful to count just the total number of running threads for which top
in -H
mode works very nicely. The full command runs top in batch mode (-b) a single time (-n 1) and strips the top 8 lines. Then counts the rest.
top -bH -n 1 | tail -n +8 | wc -l