Ограничить вывод команды TOP на конкретное имя процесса

Если вы вызываете верхнюю команду, вы получаете все запущенные процессы. Но как я могу ограничить вывод только определенным именем процесса, например "java"?

Я пробовал это   top -l 2 | grep java но таким образом вы получаете только моментальные снимки, а не постоянно обновляемый список. И top -l 0 | grep java не совсем понятно.

Ответ 1

Я предпочитаю следующее, поэтому я все еще могу использовать сверху в интерактивном режиме, не просматривая pids каждый раз, когда я его запускаю:

top -p `pgrep process-name | tr "\\n" "," | sed 's/,$//'`

Конечно, если процессы будут изменяться, вам придется повторно запустить команду.

Пояснение:

  • pgrep process-name возвращает список идентификаторов процессов, разделенных символами новой строки
  • tr "\\n" "," переводит эти символы новой строки в запятую, потому что вершина хочет разделенный запятыми список идентификаторов процессов
  • sed - редактор потоков, а sed 's/,$//' используется здесь для удаления конечной запятой

Ответ 2

Найдите pids процессов, которые вы хотите контролировать, а затем используйте параметр -p, который позволяет вам предоставить список pids для команды top.

Пример:

top -p 18884 -p 18892 -p 18919

  PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME CPU COMMAND
18884 user  25   0  672M  95M  9476 S     0.0  1.1   0:02   1 java
18892 user  25   0 2280M 123M 12252 S     0.0  1.5   0:05   1 java
18919 user  22   0 1492M 198M 28708 S     0.0  2.4   0:07   1 java

(Я считаю, вы также можете перейти в список, разделенный запятыми.)

Ответ 3

как насчет top -b | grep java

Ответ 4

Развернув @dogbane answer, вы можете получить все PID для именованного процесса с помощью pgrep, чтобы сделать следующее:

top -p "$(pgrep -d ',' java)"

Ответ 5

Используйте команду watch

watch -d 'top -n1 | grep mysql'

Ответ 6

Я запускаю его (например.): top -b | egrep -w 'java|mysqld'

Ответ 7

Я решил свою проблему, используя:

top -n1 -b | grep "имя proccess"

в этом случае: -n используется, чтобы установить, сколько раз верх будет каким процессом и -b используется для отображения всех pids

он предотвращает такие ошибки, как: top: предел pid (20) превышен

Ответ 8

Следующий код обновляет список процессов каждые 5 секунд с помощью команды watch:

watch -n 5 -t top -b -n 1 -p$(pgrep java | head -20 | tr "\\n" "," | sed 's/,$//')

Ответ 9

Используя ответ здесь, я смог создать один лайнер

top -pid $(pgrep process_name | sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/ -pid /g')

Это работает для меня на MacOS 10.12 (Sierra)

Ответ 10

Предположим, что если на сервере с таким же именем работает более 20 процессов, это не поможет

top -p pgrep oracle | head -n 20 | tr "\\n" "," | sed 's/,$//'

Он попытается перечислить и предоставить в реальном времени выход из 20 процессов, где у нас есть хорошие шансы пропустить другие процессы, которые потребляют больше ресурсов....

Я все еще ищу лучший вариант для этого

Ответ 11

Более конкретный случай, как я и искал:

Для процессов Java вы также можете использовать jps -q, где jps - это инструмент из $JAVA_HOME/bin и, следовательно, должен быть в вашем $PATH.

Ответ 12

Запуск ниже приведет к непрерывному обновлению в консоли:

bcsmc2rtese001 [~]$ echo $SHELL  
/bin/bash  
bcsmc2rtese001 [~]$ top | grep efare  or watch -d 'top | grep efare' or top -p pid
27728 efare     15   0 75184 3180 1124 S  0.3  0.0 728:28.93 tclsh  
27728 efare     15   0 75184 3180 1124 S  0.7  0.0 728:28.95 tclsh

Ответ 13

Я пришел сюда, чтобы найти ответ на этот вопрос в OSX. Я закончил тем, что хотел с помощью bash и awk:

topfiltered() {
  [[ -z "$1" ]] && return
  dump="/tmp/top_dump"
  rm -f "$dump"
  while :; do
    clear
    [[ -s "$dump" ]] && head -n $(( $LINES - 1 )) "$dump"
    top -l 1 -o cpu -ncols $(( $COLUMNS / 8 )) | awk -v p="$(pgrep -d ' ' [email protected])" '
        BEGIN { split(p, arr); for (k in arr) pids[arr[k]]=1 }
        NR<=12 || ($1 in pids)
    ' >"$dump"
  done
}

Я зацикливаюсь в режиме ведения журнала и фильтрую его с помощью awk, создавая ассоциативный массив из вывода pgrep. Awk печатает первые 12 строк, где строка 12 представляет собой заголовки столбцов, а затем каждую строку с pid, которая является ключом в массиве. Файл дампа используется для более контролируемого цикла.

Ответ 14

just top -bn 1 | grep java сделает трюк для вас