2015-08-17 2 views
0

Я хотел бы иметь возможность использовать вывод '/ bin/ps -C httpd u' (или любой процесс) и использовать awk, чтобы добавить все% MEM вместе в переменную.Сложный awk для получения информации о процессе Linux

Пример Выход:

USER  PID %CPU %MEM VSZ RSS TTY  STAT START TIME COMMAND 
root  9636 0.0 1.4 509264 14456 ?  Ss 17:34 0:00 /usr/sbin/httpd -DFOREGROUND 
apache 9639 1.6 7.0 679916 71236 ?  S 17:34 1:13 /usr/sbin/httpd -DFOREGROUND 
apache 9641 1.6 7.0 680312 71456 ?  S 17:34 1:14 /usr/sbin/httpd -DFOREGROUND 
apache 9644 1.5 7.0 680320 71356 ?  S 17:34 1:12 /usr/sbin/httpd -DFOREGROUND 
apache 9645 1.5 7.0 679904 71464 ?  S 17:34 1:08 /usr/sbin/httpd -DFOREGROUND 
apache 9646 1.7 7.0 680156 71448 ?  S 17:34 1:18 /usr/sbin/httpd -DFOREGROUND 
apache 9653 1.6 6.9 679640 70572 ?  S 17:34 1:12 /usr/sbin/httpd -DFOREGROUND 
apache 9660 1.4 7.0 679972 71240 ?  S 17:34 1:07 /usr/sbin/httpd -DFOREGROUND 
apache 11248 1.6 7.1 680020 72308 ?  S 17:39 1:10 /usr/sbin/httpd -DFOREGROUND 

Я использую другую команду, чтобы добиться чего-то подобного, чтобы получить среднее использование CPU всех ядер, так что я думаю, что это должно быть возможно сделать что-то подобное для пса.

CpuUtil=`LANG=en_GB.UTF-8 mpstat 1 1 | 
     awk '$2 ~ /CPU/ { for(i=1;i<=NF;i++) { if ($i ~ /%idle/) field=i } } $2 ~ /all/ { print 100 - $field}' | 
     tail -1` 

Вышеуказанные выходы среднего процентного содержания процессора всех процессоров.

Таким образом, моя цель состояла бы в том, чтобы иметь переменную, которая выводит общий процент памяти, используемый для всех экземпляров процесса, переданного в качестве параметра.

TotalProcMemUsage=`/bin/ps -C httpd u | awk .... ` 

Я бы потерял после AWK, который я должен учиться, но у меня нет времени на данный момент.

ответ

4

Вы можете сказать ps только выводить %MEM поле, что делает его намного легче интерпретировать результаты. Вам не нужно awk вообще:

ps -C httpd -o%mem= | paste -sd+ | bc 

man ps описывает все возможные ключевые слова, которые можно использовать в опции -o; вы можете указать более одного, разделенные запятыми. = после ключевого слова указывает, что заголовок должен быть опущен, что означает, что вам не нужно его игнорировать.

Вы можете подать результат в awk, но paste -sd+ | bc - это короткая и простая идиома для добавления списка чисел, по одному в каждой строке.

+0

Спасибо. Это похоже на то, что мне нужно. – willemdh

2

Интерпретируя свой вопрос, вы хотите добавить значения в столбце 4 ввода, игнорируя первые 1 строку ввода. Что можно сделать:

ps -C httpd | 
awk -v skip=1 -v column=4 'NR<=skip {next} { sum += $column } END { print sum }' 
+0

Спасибо за эту версию awk, что я искал. Однако ответ Ричи может быть лучшим решением. – willemdh

Смежные вопросы