Страница 1 из 1

[PERL] подсчёт процессов в UNIXе по категориям.

Добавлено: 2010-02-17 21:45:14
TITANius
Имеется Freebsd + Perl.
Нужно подсчитать количество процессов висящих в системе по их типам: uninterruptible, idle, lock, runnable, sleeping, stopped, interrupt, zombie.
Их можно определить по state в ps.

На shell'е это выглядит буквально следующим образом:

Код: Выделить всё

#!/bin/sh

ps -axo state= | sed -e 's/^\(.\).*/\1/' | awk '{ processes++; stat[$1]++ } END {
    print "processes.value " 0+processes;
    print "uninterruptible.value " 0+stat["D"];
    print "idle.value " 0+stat["I"];
    print "lock.value " 0+stat["G"];
    print "runnable.value " 0+stat["R"];
    print "sleeping.value " 0+stat["S"];
    print "stopped.value " 0+stat["T"];
    print "interrupt.value " 0+stat["W"];
    print "zombie.value " 0+stat["Z"];
    }'
Как это реализовать на перле ума не приложу :( ... please help

Re: [PERL] подсчёт процессов в UNIXе по категориям.

Добавлено: 2010-02-17 22:02:36
hizel
исходники ps намекнули на kvm.h

http://search.cpan.org/~dland/BSD-Proce ... Process.pm

Re: [PERL] подсчёт процессов в UNIXе по категориям.

Добавлено: 2010-02-17 22:57:57
TITANius
hizel писал(а):исходники ps намекнули на kvm.h
http://search.cpan.org/~dland/BSD-Proce ... Process.pm
А если не прибегать к отдельным модулям ?

Re: [PERL] подсчёт процессов в UNIXе по категориям.

Добавлено: 2010-02-17 23:04:16
hizel
а в чем проблема?

Re: [PERL] подсчёт процессов в UNIXе по категориям.

Добавлено: 2010-02-17 23:16:05
TITANius
hizel писал(а):а в чем проблема?
не созрел я ещё для модулезависымых скриптов (3 дня на перле) :)

может пора? :)
если не сложно подкинь инфу как стоит делать чтобы при использовании моего скрипта все нужные модули подтягивались и компилировались самостоятельно ?

Re: [PERL] подсчёт процессов в UNIXе по категориям.

Добавлено: 2010-02-19 0:55:12
TITANius
Прочитал про CPAN.
Написал скрипт с использованием модуля BSD::Process

Код: Выделить всё

#!/usr/bin/perl -w

use strict;
use Term::ANSIColor;
use BSD::Process;

        my @stat = (0,0,0,0,0,0,0);

        for my $p (BSD::Process::list) {
                my $proc = BSD::Process::info($p);
                $stat[$proc->{stat}-1]++;
        };
        my $sumary = $stat[0] + $stat[1] + $stat[2] + $stat[3] + $stat[4] + $stat[5] + $stat[6];
        my $format = "%-6s %8s %10s %10s %10s %9s %10s %10s\n";
        print "------------------------------ ", color("green"), "Process Information", color("reset")," -----------------------------\n\n";
        printf $format,"sumary","forked","runnable","sleeping","stopped","zombie","waiting","blocked";
        printf $format,$sumary,$stat[0],$stat[1],$stat[2],$stat[3],$stat[4],$stat[5],$stat[6];
        print "\n";

Re: [PERL] подсчёт процессов в UNIXе по категориям.

Добавлено: 2010-02-19 9:44:02
hizel
не забудьте что этот модуль только для BSD like system в слинупсах используется procfs

Re: [PERL] подсчёт процессов в UNIXе по категориям.

Добавлено: 2010-02-19 12:40:49
TITANius
да, конечно