On Fri, Oct 04, 2002 at 08:24:12PM +0200, Slaven Rezic wrote:
> Not a module, but a function which should work on FreeBSD and Linux:

Why not package this up and stick it on CPAN?  Proc::Memory or
something.  It's a good start <nitpick>though you'll probably want
to do it File::Spec style with Proc::Memory::FreeBSD, etc...</nitpick>


> =item currmem([$pid])
> 
> =for category System
> 
> Return ($mem, $realmem) of the current process or process $pid, if $pid
> is given.
> 
> =cut
> 
> sub currmem {
>     my $pid = shift || $$;
>     if (open(MAP, "/proc/$pid/map")) { # FreeBSD
>       my $mem = 0;
>       my $realmem = 0;
>       while(<MAP>) {
>           my(@l) = split /\s+/;
>           my $delta = (hex($l[1])-hex($l[0]));
>           $mem += $delta;
>           if ($l[11] ne 'vnode') {
>               $realmem += $delta;
>           }
>       }
>       close MAP;
>       ($mem, $realmem);
>     } elsif (open(MAP, "/proc/$pid/maps")) { # Linux
>       my $mem = 0;
>       my $realmem = 0;
>       while(<MAP>) {
>           my(@l) = split /\s+/;
>           my($start,$end) = split /-/, $l[0];
>           my $delta = (hex($end)-hex($start));
>           $mem += $delta;
>           if (!defined $l[5] || $l[5] eq '') {
>               $realmem += $delta;
>           }
>       }
>       close MAP;
>       ($mem, $realmem);
>     } else {
>       undef;
>     }
> }
> __END__

-- 
Michael G Schwern   <[EMAIL PROTECTED]>   http://www.pobox.com/~schwern/
Perl Quality Assurance     <[EMAIL PROTECTED]>       Kwalitee Is Job One

Reply via email to