Як вибрати конкретні процеси з 'top'?


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)" )
користувач2037659


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.