Здравствуйте.
Подскажите, пожалуйста, как быть.
Есть скрипт, при помощи которого вызываю
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
Никак не могу придумать, как вывести сумму всех значений.
Подскажите как осуществить задуманное?
#!/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";
Тройное спасибо! :)
Почему тройное?
Уже как минимум третий раз пищу сюда вопрос на тему Perl'а
и всё время мне помогаешь именно ты :)
Я удалил это сообщение.
да нет, у меня работает правильно.
попробуй вставить
print "$1\n";
перед
$total += $1;
что будет?
>да нет, у меня работает правильно.
>попробуй вставить
> print "$1\n";
>перед
> $total += $1;
>что будет?
Просто я немного переделал скрипт, чтобы можно было менять имя проверяемого процесса из командной строки, и поэтому работает не для всех имён. А, вообще, оно работает :)
Даже не так.
Он работает для всех имён, просто,видимо в момент запуска скрипта был ноль, а когда ручками запускал, немного прибавилось.
В общем, если запустить 3-5 раз, то он показывает то, что надо.