How to get (from terminal) total number of threads (per process and total for all processes)

138,081

Solution 1

To 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 }'

Solution 2

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.

Solution 3

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.

Solution 4

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).

Solution 5

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.

Share:
138,081

Related videos on Youtube

NoSenseEtAl
Author by

NoSenseEtAl

Updated on September 18, 2022

Comments

  • NoSenseEtAl
    NoSenseEtAl over 1 year

    I tried googling it, but I can't find it. I am looking for:

    1. number of threads in process X

    2. total number of threads running currently

  • Mark A
    Mark A almost 11 years
    ps -o nlwp <pid> returns NLWP :), what does that mean ?
  • jcollado
    jcollado almost 11 years
    @Siddharth NLWP stands for Number of LightWeight Processes which is the number of threads.
  • bufh
    bufh over 7 years
    You can suppress the "NLWP" with "h" (hide headers); ie: ps h -o nlwp $pid
  • Score_Under
    Score_Under over 5 years
    This is inaccurate, as it reports an extra thread per process