Как получить (из терминала) общее количество потоков (для каждого процесса и общее количество для всех процессов)

Я пытался погуглить, но не могу его найти. Я ищу:

  1. количество потоков в процессе X

  2. общее количество потоков, запущенных в данный момент

Чтобы получить количество потоков для данного pid:

ps -o nlwp <pid>

Чтобы получить сумму всех потоков, запущенных в системе:

ps -eo nlwp | tail -n +2 | awk '{ num_threads += $1 } END { print num_threads }'

Для определения количества потоков, выполняющих один процесс, вы можете посмотреть на /proc/<pid>/status. В нем должно быть указано количество потоков в качестве одного из полей.

Я основываю этот ответ на ps axms. ps это отличный инструмент для перечисления того, что запущено.

Если вы хотите отфильтровать это с помощью процесса, вы можете попробовать что-то вроде этого:

echo $(( `ps axms | grep firefox | wc -l`  - 1))

Мы вычитаем 1, потому что grep будет отображаться в этом списке.

Для всех потоков в целом это должно работать:

echo $(( `ps axms | wc -l`  - 1))

На этот раз мы вычитаем единицу, потому что есть строка заголовка.

В частности, в Linux, вот один из способов сделать это для каждого процесса:

#!/bin/shwhile read name val; do    if [ "$name" = Threads: ]; then        printf %s\\n "$val"        break    fidone < /proc/"$1"/status

Затем вы можете вызвать этот скрипт с PID в качестве аргумента, и он сообщит количество потоков, принадлежащих этому процессу.

Чтобы получить количество потоков для всей системы, этого достаточно:

#!/bin/shcount() {    printf %s\\n "$#"}count /proc/[0-9]*/task/[0-9]*

Эти подходы могут показаться немного неортодоксальными в том смысле, что они в значительной степени зависят от функций оболочки, но в свою очередь оба они быстрее, чем соответствующие ps и awk-основанные подходы на моей машине (в то же время не создавая собственных дополнительных потоков для каналов). Имейте в виду, что оболочка, запущенная для запуска этих сценариев, будет иметь собственный поток (или больше, если вы используете странную реализацию).

Чтобы получить общее количество потоков (крошечных фрагментов процесса, выполняющихся одновременно) a, вы можете использовать команду ps -o nlwp <pid> Это работает все время. Но если вы предпочитаете попробовать просмотреть его через файл. вероятно, вам следует посмотреть на файлы, которые были созданы для каждого процесса системы. Там вы можете получить полную информацию о процессе. Для каждого процесса существует папка, созданная в /proc/<pid> там же вы можете увидеть и все остальные детали.