Я хотел бы отслеживать конкретные процессы через TOP на наших серверах приложений через TOP. В настоящее время я использую в BASH следующее для отслеживания только тех процессов, которые меня интересуют:
top -p $(pgrep PSAPPSRV | tr "\\n" "," | sed 's/,$//')
Я думал, что это отличное решение, но я упустил два предостережения:
Обе ситуации означают, что я не могу отслеживать процессы в течение длительного времени, если я использую «моментальный снимок» PID в момент времени, когда я запускаю указанную выше команду.
Эти процессы выполняются от имени специального пользователя. Однако этот пользователь запускает все процессы, связанные с сервером приложений. И сервер приложений может состоять из 30 процессов, но меня интересует только конкретный процесс.
Можно ли передать новые PID в уже работающий вывод TOP?
Или лучше всего будет повторно вызывать TOP через определенные промежутки времени, передавая идентификаторы PID в это время?
top
на самом деле не предназначен для того, что вы пытаетесь сделать (на самом деле, некоторые версии top
даже не поддерживай -p
вариант).
Лучший вариант, который я могу придумать для вашей ситуации, - это обернуть top
в скрипте, который вызывает его многократно с -d
и -n
варианты, например
#!/bin/sh
while [ true ]; do
clear
top -d1 -n15 -p $(pgrep PSAPPSRV | tr "\\n" "," | sed 's/,$//')
sleep 1
done
что сделает top
показать один экран с 15 процессами, засыпать на одну секунду, затем повторить (пока вы не прервете сценарий с помощью CTRL+C.
Это проигрывает top
расширенные функции (например, возможность изменять порядок сортировки - поэтому убедитесь, что вы указали это, если это важно), но предоставит вам такой же вид отображения без особых усилий.