it-roy-ru.com

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

top -c

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

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

112
user1615330

Использование pgrep для получения pid соответствующих командных строк:

top -c -p $(pgrep -d',' -f string_to_match_in_cmd_line)

top -p ожидает разделенный запятыми список pids, поэтому мы используем -d',' в pgrep. Флаг -f в pgrep позволяет ему соответствовать командной строке вместо имени программы.

173
perreal

Это можно сделать в интерактивном режиме

После запуска top -c нажмите o и написать фильтр на столбце, например, чтобы показать строки, в которых столбец COMMAND содержит строку foo, напишите COMMAND=foo

Если вы просто хотите получить базовый вывод, этого может быть достаточно:

top -bc |grep name_of_process
94
nos

Вы можете добавить фильтры к top во время его работы, просто нажмите o ключ, а затем введите выражение фильтра. Например, для мониторинга всех процессов Java используйте выражение фильтра COMMAND=Java. Вы можете добавить несколько фильтров, нажав клавишу еще раз, вы можете фильтровать по пользователю с помощью u ключ, и вы можете очистить все фильтры с помощью = ключ.

64
Don Kirkby

Команда @ Perreal прекрасно работает! Если вы забыли, попробуйте в два этапа ...

пример: фильтр сверху отображает только приложение с именем yakuake:

$ pgrep yakuake
1755

$ top -p 1755

полезные топовые интерактивные команды 'c': переключение полного пути и имени команды 'k': убить с помощью PID «F»: фильтр по ... выберите стрелками ... затем нажмите «s», чтобы установить сортировку

ответ ниже тоже хорош ... Я искал это сегодня, но не смог его найти. Спасибо

11
BBW Before Windows

После поиска стольких ответов в StackOverflow я не нашел ответа, соответствующего моим потребностям.

То есть, чтобы команда top продолжала обновляться с заданным ключевым словом, и нам не нужно снова и снова 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;)
7
Val

Большинство ответов здесь не удаются, когда список процессов превышает 20 процессов. То есть ограничение параметра top -p . Для пользователей с более старой версией, которая не поддерживает фильтрацию с параметрами o, приведен пример сценария для получения полноэкранного/консольного вывода (сводная информация в этом выводе отсутствует).

__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
1
Manwe

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

top -c -p <PID>
1
Satish

В итоге я использовал скрипт Shell со следующим кодом:

#!/bin/bash

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