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

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 и т.д ...

tshepang
источник

Ответы:

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
6

sedзаменяет ваш на ,:

top -p $(pidof program | sed 's/ /, /g')
шутник
источник
3

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

top -p `pgrep -d, -f program1`, `pgrep -d, -f program2`
Риз
источник
Лучшее использование:top -p $(pgrep -d, "(nginx|mysql)" )
user2037659