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

top -c

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

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

108 голосов | спросил user1615330 22 PM00000060000003231 2012, 18:39:32

8 ответов


0

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

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

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

ответил perreal 22 PM00000060000001931 2012, 18:49:19
0

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

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

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

top -bc |grep name_of_process
ответил nos 18 J0000006Europe/Moscow 2014, 01:25:05
0

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

ответил Don Kirkby 9 Jam1000000amSat, 09 Jan 2016 04:58:18 +030016 2016, 04:58:18
0

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

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

$ pgrep yakuake
1755

$ top -p 1755

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

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

ответил BBW Before Windows 18 J0000006Europe/Moscow 2014, 00:50:59
0

После поиска стольких ответов в 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;)
ответил Val 26 FriEurope/Moscow2014-12-26T09:54:27+03:00Europe/Moscow12bEurope/MoscowFri, 26 Dec 2014 09:54:27 +0300 2014, 09:54:27
0

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

top -c -p <PID>
ответил Satish 22 PM00000080000000631 2012, 20:32:06
0

Большинство ответов здесь не удаются, когда список процессов превышает 20 процессов. Это ограничение top -p. Для тех, у кого более старая версия top, которая не поддерживает фильтрацию с параметрами 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
ответил Manwe 21 22017vEurope/Moscow11bEurope/MoscowTue, 21 Nov 2017 11:45:30 +0300 2017, 11:45:30
0

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

#!/bin/bash

while [ 1 == 1 ]
do
    clear
    ps auxf |grep -ve "grep" |grep -E "MSG[^\ ]*" --color=auto
    sleep 5
done
ответил Jester 10 22015vEurope/Moscow11bEurope/MoscowTue, 10 Nov 2015 17:21:12 +0300 2015, 17:21:12

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132