it-swarm.com.ru

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

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

21
Traker

В системах, которые имеют доступную 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 считает и печатает количество строк на своем входе.

51
David Z
result=`ps -Al | grep command-name | wc -l`
echo $result
10
Amardeep AC9MF
ps -Al | grep -c bash
7
Alex B

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

ps -ef | grep -cw [p] имя_процесса

OR

pS Aux | grep -cw [p] имя_процесса

например:  

ps -ef | grep -cw [i] nit

5
Bhagya Prasad NR

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

ps aux | grep [j]ava -c

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

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

3
Niall O Shea

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

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]) } }'
2
fraff

Следующий скрипт bash может быть запущен как задание 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» также может быть передано как параметр командной строки. Кроме того, несколько системных процессов могут быть включены в список исключений.

1
Sury Soni

Вы можете использовать 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, что более элегантно.

0
BreakBadSP