URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 3233
[ Назад ]

Исходное сообщение
"Не могу понять, как сделать..."

Отправлено alexeylomov , 02-Авг-04 18:18 
Здравствуйте.
Подскажите, пожалуйста, как быть.
Есть скрипт, при помощи которого вызываю
ps axo "%cpu command" | grep httpd
Получаю что-то вроде
0.0 /usr/sbin/httpd
0.0 /usr/sbin/httpd
0.6 /usr/sbin/httpd
0.0 /usr/sbin/httpd
0.1 /usr/sbin/httpd
0.0 /usr/sbin/httpd
0.0 perl cpu_using.pl httpd
0.0 sh -c ps axo "%cpu command" | grep httpd
0.0 grep httpd
Затем нужно вывести, сколько всего % использует httpd.
Выражение типа =~ /([0-9,.]+)\s/ естественно выводит только первое значение 0.0
Никак не могу придумать, как вывести сумму всех значений.
Подскажите как осуществить задуманное?

Содержание

Сообщения в этом обсуждении
"Не могу понять, как сделать..."
Отправлено ihor , 03-Авг-04 09:54 
#!/usr/local/bin/perl -w
use strict;
my ($str, $total, $cnt);

open(PS, 'ps -axo "%cpu command"|grep httpd|') || die "Can't open ps: $!";
$total = 0;
$cnt = 0;
while (defined ($str = <PS>)) {
  if ($str =~ /^\s*([0-9\.\,]+)\s+.+\/httpd/) {
    $total += $1;
    $cnt++;
  } # if
} # while
close(PS);
print "number of processes: $cnt; total percentage: $total\n";


"Не могу понять, как сделать..."
Отправлено alexeylomov , 03-Авг-04 12:44 
Тройное спасибо! :)
Почему тройное?
Уже как минимум третий раз пищу сюда вопрос на тему Perl'а
и всё время мне помогаешь именно ты :)

"Что-то не так."
Отправлено alexeylomov , 03-Авг-04 13:47 
Я удалил это сообщение.

"Что-то не так."
Отправлено ihor , 03-Авг-04 13:58 
да нет, у меня работает правильно.
попробуй вставить
  print "$1\n";
перед
  $total += $1;
что будет?

"Что-то не так."
Отправлено alexeylomov , 03-Авг-04 14:01 
>да нет, у меня работает правильно.
>попробуй вставить
>  print "$1\n";
>перед
>  $total += $1;
>что будет?


Просто я немного переделал скрипт, чтобы можно было менять имя проверяемого процесса из командной строки, и поэтому работает не для всех имён.  А, вообще, оно работает :)


"Всё ок."
Отправлено alexeylomov , 03-Авг-04 14:19 
Даже не так.
Он работает для всех имён, просто,видимо в момент запуска скрипта был ноль, а когда ручками запускал, немного прибавилось.
В общем, если запустить 3-5 раз, то он показывает то, что надо.