Поиск количества процессов в Linux через командную строку

Я искал лучший способ найти количество запущенных процессов с тем же именем через командную строку в Linux. Например, если бы я хотел найти количество выполняемых процессов bash и получить "5". В настоящее время у меня есть script, который выполняет "pidof", а затем делает подсчет для токенированной строки. Это работает отлично, но мне было интересно, есть ли лучший способ, который можно сделать полностью через командную строку. Заранее спасибо за вашу помощь.

Ответ 1

В системах с доступными pgrep параметр -c возвращает количество количества процессов, соответствующих указанному имени

pgrep -c command_name

Обратите внимание, что это соответствие grep, не точное совпадение, так, например, pgrep sh также будет соответствовать процессам bash. Если вы хотите точное совпадение, используйте также параметр -x.

Если pgrep недоступно, вы можете использовать ps и wc.

ps -C command_name --no-headers | wc -l

Параметр -c для ps принимает в качестве аргумента command_name, и программа печатает таблицу с информацией о процессах, исполняемое имя которых соответствует имени данной команды. Это точное соответствие, а не grep - стиль. Параметр --no-headers подавляет заголовки таблицы, которые обычно печатаются как первая строка. С помощью --no-headers вы получаете одну линию для каждого процесса. Затем wc -l подсчитывает и печатает количество строк на входе.

Ответ 2

result=`ps -Al | grep command-name | wc -l`
echo $result

Ответ 3

ps -Al | grep -c bash

Ответ 4

Вы можете попробовать:

ps -ef | grep -cw [p] rocess_name

ИЛИ

ps aux | grep -cw [p] rocess_name

например:

ps -ef | grep -cw [i] nit

Ответ 5

Некоторые из вышеперечисленных не работали для меня, но они помогли мне на пути к этому.

ps aux | grep [j]ava -c

Для новичков в Linux:

ps aux печатает все текущие процессы, grep выполняет поиск всех процессов, соответствующих слову java, скобки [] удаляют процесс, который вы только что запускали, поэтому он не будет включать это как выполняющийся процесс и, наконец, -c означает значение count.

Ответ 6

Список всех имен процессов, сортировка и подсчет

ps --no-headers -A -o comm | sort | uniq -c

Вы также можете перечислить процесс, связанный с tty

ps --no-headers a -o comm | sort | uniq -c

Вы можете фильтровать с помощью:

ps --no-headers -A -o comm | awk '{ list[$1] ++ } END { for (i in list) { if (list[i] > 10) printf ("%20s: %s\n", i, list[i]) } }'

Ответ 7

Следующее bash script может выполняться как задание cron, и вы можете получить электронную почту, если какой-либо процесс слишком сильно перескакивает.

for i in `ps -A -o comm= --sort=+comm | uniq`; 
do 
    if (( `ps -C $i --no-headers | wc -l` > 10 )); then 
        echo `hostname` $i `ps -C $i --no-headers | wc -l` ;
    fi
done

Замените 10 своим количеством проблем.

TODO: "10" также может передаваться как параметр командной строки. Кроме того, в список исключений можно добавить несколько системных процессов.

Ответ 8

Вы можете использовать ps (покажет моментальный снимок процессов) с wc (будет считать количество слов, опция wc -l будет считать строки, то есть символы новой строки). Что очень легко и просто запомнить.

ps -e | grep processName | wc -l

Эта простая команда напечатает количество процессов, запущенных на текущем сервере. Если вы хотите узнать количество процессов, запущенных на текущем сервере для текущего пользователя, используйте -U для ps.

ps -U root | grep processName | wc -l

изменить корень с именем пользователя.

Но, как уже упоминалось во многих других ответах, вы также можете использовать ps -e | grep -c process_name ps -e | grep -c process_name который является более элегантным способом.

Ответ 9

ps aux | wc -l

Эта команда показывает количество процессов, запущенных в системе всеми пользователями.

Для конкретного пользователя вы можете использовать следующую команду:

ps -u <username> | wc -l

заменить на действительное имя пользователя перед запуском :)

Ответ 10

Я не знаю, что это такое на других дистрибутивах, но на Ubuntu это:

nproc

nproc является частью coreutils. Таким образом, он должен быть доступен на большинстве дистрибутивов Linux.