Как получить общее количество запущенных процессов и потоков в Linux с использованием Python? - PullRequest
0 голосов
/ 08 февраля 2019

Я могу получить общее количество процессов, используя команды терминала.Я пробовал следующую команду для подсчета процессов -

ps aux | wc -l

И для подсчета потоков -

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

Но я не хочу использовать команду терминала, так как она не разрешена в моем текущем проектеЕсть ли какой-либо API или другой метод, где я могу получить эту информацию без вызова терминала.

Я пытался использовать пакет threading , но он отображается на уровне процесса, я получаю вывод как 1 .

Я пытался psutil , но он дает информацию для отдельного процесса.

Дополнительная информация

OS - Ubuntu 16
Python 3.7.2

1 Ответ

0 голосов
/ 08 февраля 2019

Просто попробуйте это:

Если вы собираетесь сделать все это с помощью большой команды оболочки, просто добавьте аргумент -c в grep, чтобы он подсчитывал количество строк вместо реальных строк.:

ps uaxw |grep python |grep -v grep

Конечно, вы можете сделать это более сложным, добавив |wc -l до конца или путем подсчета строк в Python, но почему?

В качестве альтернативы, зачем вообще задействовать оболочку?Вы можете выполнять поиск в Python так же легко, как и запускать grep, и тогда у вас не будет проблемы с тем, что вы случайно создали процесс grep, который ps будет повторять в соответствии с вашим поиском, а затем нужно будет выполнить grep -v его обратно:

procs = subprocess.check_output(['ps', 'uaxw']).splitlines()
kms_procs = [proc for proc in procs if 'kms' in proc]
count = len(kms_procs)

Или, проще говоря, не просите ps дать вам целую кучу информации, которая вам не нужна, а затем выясните, как ее игнорировать, просто попросите информацию, которую выwant:

procs = subprocess.check_output(['ps', '-a', '-c', '-ocomm=']).splitlines()
count = procs.count('kms')

Или, что еще проще, установите psutil и даже не пытайтесь запускать подпроцессы и анализировать их вывод:

count = sum(1 for proc in psutil.process_iter() if proc.name() == 'kms')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...