Я спробував погуглити його, але не можу його знайти. Шукаю:
кількість потоків у процесі X
загальна кількість потоків, що працюють зараз
Я спробував погуглити його, але не можу його знайти. Шукаю:
кількість потоків у процесі X
загальна кількість потоків, що працюють зараз
Відповіді:
Щоб отримати кількість потоків для заданого підпису:
ps -o nlwp <pid>
Щоб отримати суму всіх потоків, що працюють у системі:
ps -eo nlwp | tail -n +2 | awk '{ num_threads += $1 } END { print num_threads }'
ps -o nlwp <pid>
повертає NLWP :), що це означає?
ps h -o nlwp $pid
Я грунтуюся на цій відповіді ps axms
. ps
є прекрасним інструментом для переліку того, що працює.
Якщо ви хочете відфільтрувати це за допомогою процесу, ви можете спробувати щось подібне:
echo $(( `ps axms | grep firefox | wc -l` - 1))
Ми віднімаємо 1, оскільки в цьому списку відображатиметься grep.
Для всіх потоків в цілому це має працювати:
echo $(( `ps axms | wc -l` - 1))
Цього разу віднімаємо, бо є рядок заголовка.
Щоб отримати загальну кількість потоків (крихітних фрагментів процесу, що працює одночасно), ви можете використовувати команду, ps -o nlwp <pid>
яка працює весь час. Але якщо ви віддаєте перевагу спробувати переглянути його через файл. вам, мабуть, слід переглянути файли, створені для кожного процесу системи. Там ви можете отримати остаточні деталі процесу. Для кожного процесу створена папка, в якій /proc/<pid>
ви також можете побачити всі інші деталі.
Спеціально для Linux, ось один спосіб зробити це за кожний процес:
#!/bin/sh
while read name val; do
if [ "$name" = Threads: ]; then
printf %s\\n "$val"
return
fi
done < /proc/"$1"/status
Потім ви можете викликати цей скрипт із PID як аргумент, і він повідомить про кількість потоків, що належать цьому процесу.
Щоб отримати кількість ниток для всієї системи, цього достатньо:
#!/bin/sh
count() {
printf %s\\n "$#"
}
count /proc/[0-9]*/task/[0-9]*
Ці підходи можуть здатися трохи неортодоксальними, оскільки вони значною мірою покладаються на функції оболонки, але взамін обидва вони швидші, ніж відповідні ps
та awk
основані на моїй машині підходи (в той же час не створюючи додаткових власних ниток для труб). Майте на увазі, що оболонка, запущена для запуску цих сценаріїв, матиме власну нитку (або більше, якщо ви використовуєте дивну реалізацію).