Как выбрать конкретные процессы с «верхом»?


18

В случае, если одна программа имеет несколько экземпляров, запуск pidof programдает:

`1 2 3`

top -pпринимает разделенные запятыми аргументы: 1, 2, 3.

Это означает, что top -p `pidof program`это не сработает:

    top: unknown argument '1'
usage:  top -hv | -bcisSH -d delay -n iterations [-u user | -U user] -p pid [,pid ...]

Можете ли вы показать мне, как это сделать. Я не знаком с awk, sed и т.д ...

Ответы:


25

Альтернатива sedдля простых вещей, таких как это tr:

top -p $(pidof program | tr ' ' ',')

tr также может легко обрабатывать переменное количество пробелов:

tr -s ' ' ','

Кроме того, если у вас есть в наличии, pgrepможет хорошо работать здесь:

top -p $(pgrep -d , program)

Убедитесь, что вы оставляете пробел между -dи ,в качестве аргумента (разделитель) используется запятая.

Также обратите внимание, что pgrep будет возвращать каждый результат «программы», поэтому, если у вас есть процесс с именем «program-foo», он также будет возвращен (отсюда и название pgrep).


Для более чем одной программыtop -p $(pgrep -d, "(nginx|mysql)" )
user2037659


3

Это хорошо работает для отслеживания более чем одной программы:

top -p `pgrep -d, -f program1`, `pgrep -d, -f program2`

Лучшее использование:top -p $(pgrep -d, "(nginx|mysql)" )
user2037659
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.