команда top-c в linux для фильтрации перечисленных процессов на основе имени процесса


top -c

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

например, я хотел бы, чтобы top-some option-substring processname и top отображали pids только с этой подстрокой в имени команды

8 98

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, write COMMAND=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;)

Как насчет этого?

top -c -p <PID>

большинство ответов не удается здесь, когда список процессов превышает 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

в итоге я использовал сценарий оболочки со следующим кодом:

#!/bin/bash

while [ 1 == 1 ]
do
    clear
    ps auxf |grep -ve "grep" |grep -E "MSG[^\ ]*" --color=auto
    sleep 5
done