Поиск количества процессов в 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.