Если вы вызовете команду top, вы получите все запущенные процессы. Но как я могу ограничить вывод только определенным именем процесса, например "java" ?
Я пробовал этот топ -l 2 | grep java, но таким образом вы получаете только снимки, а не постоянно обновляемый список. И топ -l 0 | grep java не совсем понятен.
Ответы:
Я предпочитаю следующее, поэтому я все еще могу использовать top в интерактивном режиме без необходимости искать pid-идентификаторы каждый раз, когда я его запускаю:
Конечно, если процессы изменятся, вам придется повторно запустить команду.
Пояснение:
pgrep process-name
возвращает список идентификаторов процессов, разделенных символами новой строкиtr "\\n" ","
переводит эти новые строки в запятые, потому что top хочет список идентификаторов процессов, разделенных запятымиsed
является редактором потока, иsed 's/,$//'
используется здесь для удаления конечной запятойисточник
top: pid limit (20) exceeded
. Есть ли способ обойти этот предел?top -p $(pgrep process-name | head -20 | tr "\\n" "," | sed 's/,$//')
. Это покажет данные для первых 20 PID, возвращенныхpgrep
.-pid
вместо-p
.Найдите идентификаторы процессов, которые вы хотите отслеживать, а затем используйте
-p
параметр, который позволяет вам предоставить список идентификаторов процессам.top
команде.Пример:
(Я считаю, что вы также можете передать список, разделенный запятыми.)
источник
как насчет top -b | grep java
источник
Расширение на ответ @ dogbane , вы можете получить все PID для именованного процесса с помощью,
pgrep
чтобы сделать следующее:источник
top -p "$(pgrep -d ',' php)" top: pid limit (20) exceeded
man top
говорит: «Эта опция может быть указана до 20 раз, или вы можете предоставить список с разделителями-запятыми, содержащий до 20 идентификаторов». Черт возьми.Используйте часы команду
источник
man watch
" watch запускает команду несколько раз, отображая ее вывод и ошибки "; он не показывает запущенные в данный момент процессы, как этоtop
делаетwatch -d 'top -b -n1 | grep mysql'
Используя ответ отсюда, я смог создать один лайнер
Это работает для меня на MacOS 10.12 (Sierra)
источник
Я решил свою проблему, используя:
в этом случае: -n используется, чтобы установить, сколько раз top будет какой процесс,
а -b используется для отображения всех pid
это предотвращает такие ошибки, как: top: pid limit (20) exceeded
источник
Следующий код обновляет список процессов каждые 5 секунд с помощью команды watch:
watch -n 5 -t top -b -n 1 -p$(pgrep java | head -20 | tr "\\n" "," | sed 's/,$//')
источник
Запускаю (например):
top -b | egrep -w 'java|mysqld'
источник
Предположим ... если на сервере с тем же именем запущено более 20 процессов ... это не поможет
топ -p
pgrep oracle | head -n 20 | tr "\\n" "," | sed 's/,$//'
Он попытается перечислить и обеспечить вывод в реальном времени 20 процессов, где у нас есть хорошие шансы пропустить другие процессы, которые потребляют больше ресурсов ....
Я все еще ищу вариант получше
источник
Более конкретный случай, который я действительно искал:
Для Java - процессы можно также использовать
jps -q
при этом JPS является инструментом от $ JAVA_HOME / бункера и , следовательно , должно быть в вашем $ PATH.источник
Я пришел сюда в поисках ответа на OSX. В итоге я получил то, что хотел, с помощью bash и awk:
Я зацикливаюсь в режиме регистрации и фильтрую его с помощью awk, создавая ассоциативный массив из вывода pgrep. Awk печатает первые 12 строк, где строка 12 - заголовки столбцов, а затем каждую строку с идентификатором pid, который является ключом в массиве. Файл дампа используется для более наблюдаемого цикла.
источник
просто
top -bn 1 | grep java
сделаю трюк за тебяисточник
Выполнение нижеприведенного приведет к непрерывному обновлению в консоли:
источник
Вот единственное решение для MacOS:
хотя это будет нежелательно сообщать,
invalid option or syntax: -pid
если нет активныхjava
процессов.ОБЪЯСНЕНИЕ
Другие решения, размещенные здесь, используют этот формат
top -p id1,id2,id3
, но MacOStop
поддерживает только громоздкий формат.top -pid id1 -pid id2 -pid id3
.Итак, во-первых, мы получаем список идентификаторов процессов, которые имеют имя процесса "java":
и мы передаем это,
awk
которое объединяет результаты с разделителем" -pid "
Увы, остается ограничитель! Например, мы уже могли получить строку
"123 -pid 456 -pid 789 -pid "
.Затем мы просто используем
sed
для удаления последних 6 символов разделителя.Мы готовы передать результаты
top
:источник
получить идентификатор процесса:
скажите сверху, какие pid процесса отображать
пример:
Вверху будут отображаться только 2 консольных процесса. Это полезно на загруженном сервере через ssh, без необходимости использовать grep.
источник
Используя подход, упомянутый в ответе Рика Байерса:
но у меня было запущено более 20 процессов, поэтому следующая команда может быть полезна тем, кто сталкивается с подобной ситуацией.
pgrep
получает список процессов с заданным именем - в данном случае java.head
используется для получения первых 20 идентификаторов, потому что top не может обрабатывать более 20 идентификаторов при использовании аргумента -p. Наконец,paste
присоединяется к списку идентификаторов pid с символом ','.Вы можете контролировать имя процесса, которое вы ищете, в приведенной выше команде и количество процессов с этим именем, которые вы хотите наблюдать. Вы можете игнорировать
head -n 20
часть, если количество ваших процессов с данным именем меньше 20.источник