Я отслеживаю несколько процессов с помощью ie '#top -p 22055,21995' Но многие из них начинаются с fwk* ie fwk3_dev, fwk5_dev
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
22055 admin 0 -20 832m 302m 41m S 20 2.5 14973:53 fwk3_dev
21995 admin 0 -20 834m 304m 41m S 14 2.6 10179:55 fwk5_dev
Как я могу отслеживать с помощью регулярного выражения имя процесса fwk*? Я имею в виду все процессы, начинающиеся с «fwk»?
решение1
top
само по себе это не сделает, но вы можете написать простой скрипт оболочки, который будет работать top
в пакетном режиме ( -b
опция), фильтруячтоиспользуя grep, и в цикле. Это не будет интерактивным.
Например
while :; do clear; top -b -n 1 |grep ' fwk' ;sleep 1; done
grep
распознает регулярные выражения, если есть такая -E
возможность. Но ваш пример можно обработать, просто добавив пробел и "fwk" (если только у вас нет пользователя с таким же именем).
Некоторые версииtop
может потребоваться другой параметр (например, -d
) для запуска только один раз в пакетном режиме.
решение2
# first generate a comma-separated list of matching PIDs
pids=$(ps a -o pid,args | awk '/[f]wk/ {print $1}' | xargs | sed -e 's/ /,/g')
# then run top with that list
top -p $pids
ПРИМЕЧАНИЕ: если какие-либо fwk*
процессы будут запущены в короткий промежуток времени между созданием списка и его запуском top
, они не будут включены в отображение.