top -pid 3907 -stats "pid,command,cpu"
-pid 3907
: ваш идентификатор процесса
-stats pid,command,cpu
: показывать только идентификатор процесса, имя и процессор%
Не нужно запускать awk
на выходе.
Если вы хотите постобработать вывод, используйте -l 0
для запуска в режиме регистрации (0 означает неопределенно, все остальное ограничивает количество выборок). Вывод будет выглядеть так (два повторения):
Processes: 72 total, 3 running, 1 stuck, 68 sleeping, 326 threads
2011/05/10 19:15:13
Load Avg: 0.14, 0.14, 0.09
CPU usage: 20.0% user, 26.66% sys, 53.33% idle
SharedLibs: 5304K resident, 5208K data, 0B linkedit.
MemRegions: 16345 total, 1048M resident, 54M private, 338M shared.
PhysMem: 726M wired, 1802M active, 687M inactive, 3215M used, 750M free.
VM: 169G vsize, 1036M framework vsize, 5261732(0) pageins, 552476(0) pageouts.
Networks: packets: 46747406/52G in, 32528901/3715M out.
Disks: 9452898/244G read, 11226269/293G written.
PID COMMAND %CPU
3907 WindowServer 0.0
Processes: 72 total, 3 running, 1 stuck, 68 sleeping, 326 threads
2011/05/10 19:15:14
Load Avg: 0.13, 0.14, 0.09
CPU usage: 0.95% user, 1.90% sys, 97.14% idle
SharedLibs: 5304K resident, 5208K data, 0B linkedit.
MemRegions: 16346 total, 906M resident, 54M private, 386M shared.
PhysMem: 726M wired, 1802M active, 687M inactive, 3215M used, 751M free.
VM: 169G vsize, 1036M framework vsize, 5261732(0) pageins, 552476(0) pageouts.
Networks: packets: 46747406/52G in, 32528901/3715M out.
Disks: 9452898/244G read, 11226269/293G written.
PID COMMAND %CPU
3907 WindowServer 2.7
Используйте awk
или аналогичный инструмент для отображения только каждой 13-й строки (так как эти строки содержат значения в этом примере):
$ top -l 0 -pid 3907 -stats pid,command,cpu | awk 'NR%13==0'
3907 WindowServer 0.0
3907 WindowServer 1.3
3907 WindowServer 2.2
# top -p1 -stats "pid,command,cpu" top: unknown option 't'
top
от Linux.Это, безусловно, можно сделать, и я собираюсь объяснить, как я это сделаю. Я не притворяюсь, что это оптимальный подход, но он делает свою работу. Я использую Linux (и оболочку bash), поэтому поведение моего топа по умолчанию может немного отличаться. Таким образом, вам может понадобиться настроить этот мини-Howto для вашего конкретного сценария.
Просто запустите top без каких-либо аргументов:
$ top
Вот заголовок и соответствующая строка из моего вывода:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2569 user 20 0 339m 86m 10m S 7.8 6.9 6:42.99 java
Я выбрал процесс, который остается в памяти на некоторое время и фактически потребляет процессор, я буду использовать его в качестве процесса тестирования для достижения конечной цели.
По умолчанию top работает в интерактивном режиме. Это меня не устраивает, я хочу захватить соответствующие данные и распечатать их. После этого я справлюсь с задачей интерактивного отображения данных. Соответствующие цитаты из верхней страницы руководства:
Это скорректированная команда top, которая печатает вывод только один раз, а затем завершает работу:
$ top -b -n 1
Я знаю PID, который хочу посмотреть, поэтому добавлю еще одно ограничение в начало, чтобы оно печатало данные только об этом процессе:
$ top -b -n 1 -p 2569
Даже в пакетном режиме top по-прежнему печатает заголовок, содержащий разные системные статистические данные, такие как время работы, свободная память / обмен и т. Д. Мне это не нужно. Все, что мне нужно, - это только одна строка - та, которая содержит данные о моем процессе, поэтому я вырежу их из всего вывода следующим образом:
$ top -b -n 1 -p 2569 | tail -n 2 | head -n 1
Как видите, у меня вторая строка из 1.
Я передам эту строку в awk, чтобы извлечь только нужные мне столбцы:
$ top -b -n 1 -p 2569 | tail -n 2 | head -n 1 | awk '{print $1, $12, $9}'
До сих пор я выполнял эти манипуляции в командной строке, сейчас пришло время добавить немного настойчивости и гибкости в наш жестко запрограммированный конкретный случай. Я перемещаю всю строку в простой сценарий оболочки. Я назову это 3top , имя подчеркнуто, потому что оно будет использовано позже:
#!/bin/bash
top -b -n 1 -p 2569 | tail -n 2 | head -n 1 | awk '{print $1, $12, $9}'
Номер PID жестко закодирован, вот как заставить скрипт принять его в качестве аргумента командной строки:
#!/bin/bash
top -b -n 1 -p "$1" | tail -n 2 | head -n 1 | awk '{print $1, $12, $9}'
Чтобы отобразить статистику 3top о PID 2569, его необходимо вызвать так:
$ ./3top 2569
Я также хочу, чтобы процент отображался после загрузки процессора, поэтому я настраиваю свой скрипт 3top следующим образом:
#!/bin/bash
out=$(top -b -n 1 -p "$1" | tail -n 2 | head -n 1 | awk '{print $1, $12, $9}')
echo "$out%"
Я перенаправил весь вывод цепочки команд (связанных через каналы) в переменную. Затем я просто печатаю его с помощью echo и добавляю «%» в конце, так как загрузка процессора - последнее поле
На данный момент у меня есть пакетный скрипт, который принимает PID в качестве аргумента и печатает статистику один раз. Хотите мониторинг в реальном времени вместо этого? Это легко, потому что часы могут это сделать! Запустите скрипт так:
$ watch -n 1 3top 2569
Он будет осуществлять мониторинг в режиме реального времени, выполняя 3top один раз в секунду.
источник
top
. неверный параметр или синтаксис: -b . Не знаю, почему за это неоднократно проголосовали.top
(inprocps
) не может быть установлен с помощью Homebrew, MacPorts или Fink и не может быть скомпилирован из источника с использованием либо,make
либоcc top.c
.Формат
top
отображения настраивается, но нет способа указать параметры отображения в командной строке. Однако, если вы изобретательны, вы можете делать то, что вам нужно, умело манипулируя~/.toprc
файлом.Предполагая, что вы еще не настроили отображение
top
(и не имеете~/.toprc
файла):top
.*
рядом с которым вы не хотите, нажмите соответствующую букву, чтобы отменить выбор этого поля. Например, нажмите, eчтобы отменить выборUser Name
поля. Когда вы закончите, вы должны иметь только*
рядомProcess Id
,CPU usage
иCommand name/line
.~/.toprc
файл.top
, затем снова запустите, чтобы убедиться, что ваши настройки сохранены.~/.toprc
в что-то вроде~/min.toprc
перед запускомtop
. Если вы хотите переключиться на минимальный макет, переименуйте~/min.toprc
обратно~/.toprc
до запускаtop
.Это переименование и запуск файла,
top
вероятно, может быть преобразован в простой сценарий оболочки кем-то, у кого больше опыта и знаний, чем у меня. Вам понадобится особое внимание, если ваш обычныйtop
макет уже был настроен.источник
.toprc
? Мне нравится добавлять фильтрRUID>999
при запуске.