команда top-c в linux для фильтрации перечисленных процессов на основе имени процесса
top -c
Top перечисляет все процессы, есть хорошие варианты для фильтрации процессов по имени пользователя с помощью опции-u, но мне интересно, есть ли простой способ фильтровать процессы на основе processname, указанного в столбце COMMAND верхнего вывода.
например, я хотел бы, чтобы top-some option-substring processname и top отображали pids только с этой подстрокой в имени команды
8 ответов:
используя pgrep, чтобы получить pid из соответствующих командных строк:
top -c -p $(pgrep -d',' -f string_to_match_in_cmd_line)
top
-p
ожидает список pids через запятую, поэтому мы используем-d','
в pgrep. Элемент-f
флаг в pgrep делает его соответствовать командной строке вместо имени программы.
Это можно сделать в интерактивном режиме
после
top -c
, нажмите o и написать фильтр на столбец, например, чтобы показать строки, где командный столбец содержит строку foo, writeCOMMAND=foo
Если вы просто хотите какой-то основной вывод, этого может быть достаточно:
top -bc |grep name_of_process
Вы можете добавить фильтры к
top
пока он работает, просто нажмите o ключ, а затем введите выражение фильтра. Например, для мониторинга всех процессов java используйте выражение фильтраCOMMAND=java
. Вы можете добавить несколько фильтров, нажав клавишу еще раз, вы можете фильтровать по пользователю с помощью u ключ, и вы можете очистить все фильтры с = ключ.
команда @ perreal отлично работает! Если вы забыли, попробуйте в два этапа...
пример: фильтр сверху для отображения только приложения под названием yakuake:
$ pgrep yakuake 1755 $ top -p 1755
полезные верхние интерактивные команды 'c': переключение полного пути и имени команды 'k': убить Пидом 'Ф' : фильтр по... Выберите с помощью стрелок... затем нажмите 's', чтобы установить сортировку
ответ ниже тоже хорошо... Я искал это сегодня, но не смог найти. Спасибо
после поиска так много ответов на StackOverflow, я не видел ответа, чтобы соответствовать моим потребностям.
то есть, чтобы сделать верхнюю команду, чтобы сохранить обновление с заданным ключевым словом, и нам не нужно CTRL+C / top снова и снова, когда появляются новые процессы.
таким образом, я делаю новый...
здесь идет версия без перезапуска.
__keyword=name_of_process; (while :; do __arg=$(pgrep -d',' -f $__keyword); if [ -z "$__arg" ]; then top -u 65536 -n 1; else top -c -n 1 -p $__arg; fi; sleep 1; done;)
измените ключевое слово__, и оно должно работать. (Ubuntu 2.6.38 протестировано)
2.14.2015 добавлено: Этот часть рабочей нагрузки системы отсутствует с кодом выше. Для людей, которые заботятся о" средней нагрузке " часть:
__keyword=name_of_process; (while :; do __arg=$(pgrep -d',' -f $__keyword); if [ -z "$__arg" ]; then top -u 65536 -n 1; else top -c -n 1 -p $__arg; fi; uptime; sleep 1; done;)
большинство ответов не удается здесь, когда список процессов превышает 20 процессов. То есть
top -p
ограничения вариант. Для тех, кто старше топ, который не поддерживает фильтрацию сo
параметры, вот пример сценария, чтобы получить полный экран / консоль outuput (сводная информация отсутствует в этом выводе).__keyword="YOUR_FILTER" ; ( FILL=""; for i in $( seq 1 $(stty size|cut -f1 -d" ")); do FILL=$'\n'$FILL; done ; while :; do HSIZE=$(( $(stty size|cut -f1 -d" ") - 1 )); (top -bcn1 | grep "$__keyword"; echo "$FILL" )|head -n$HSIZE; sleep 1;done )
объяснения
__keyword = your grep filter keyword HSIZE=console height FILL=new lines to fill the screen if list is shorter than console height top -bcn1 = batch, full commandline, repeat once