42

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

1
66

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 }'
3
  • 2
    ps -o nlwp <pid> returns NLWP :), what does that mean ? – Siddharth May 4 '13 at 5:12
  • 3
    @Siddharth NLWP stands for Number of LightWeight Processes which is the number of threads. – jcollado May 7 '13 at 2:45
  • You can suppress the "NLWP" with "h" (hide headers); ie: ps h -o nlwp $pid – bufh Aug 9 '16 at 9:00
9

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.

4

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.

1
  • This is inaccurate, as it reports an extra thread per process – Score_Under Jan 29 '19 at 17:14
2

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

1

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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.