#!perl
use strict;
my %uprocesses;
my %ucpupct;
my %umempct;
my %umemvsz;
my %umemrss;
my %cprocesses;
my %ccpupct;
my %cmempct;
my %cmemvsz;
my %cmemrss;
my @processes;
@processes = `ps auwwx`;
shift(@processes);
foreach my $psline ( @processes )
{
my @psinfo;
chomp($psline);
@psinfo = split(/ +/, $psline);
$uprocesses{$psinfo[0]} += 1;
$ucpupct{$psinfo[0]} += $psinfo[2];
$umempct{$psinfo[0]} += abs($psinfo[3]);
$umemvsz{$psinfo[0]} += $psinfo[4] / 1024; # We want MB, not kB
$umemrss{$psinfo[0]} += $psinfo[5] / 1024;
if ( !( $psinfo[10] =~ /^\[/ ) )
{
$cprocesses{$psinfo[10]} += 1;
$ccpupct{$psinfo[10]} += $psinfo[2];
$cmempct{$psinfo[10]} += abs($psinfo[3]);
$cmemvsz{$psinfo[10]} += $psinfo[4] / 1024;
$cmemrss{$psinfo[10]} += $psinfo[5] / 1024;
}
}
print "USER STATS:\n";
print "USER PROCESSES \%CPU \%MEM VSZ RSS\n";
foreach my $key ( keys %ucpupct )
{
printf("%-35.35s %9d %4.1f %4.1f %7.2fM %7.2fM\n", $key, $uprocesses{$key}, $ucpupct{$key}, $umempct{$key}, $umemvsz{$key}, $umemrss{$key});
}
print "\nCOMMAND STATS:\n";
print "COMMAND PROCESSES \%CPU \%MEM VSZ RSS\n";
foreach my $key ( keys %ccpupct )
{
printf("%-35.35s %9d %4.1f %4.1f %7.2fM %7.2fM\n", $key, $cprocesses{$key}, $ccpupct{$key}, $cmempct{$key}, $cmemvsz{$key}, $cmemrss{$key});
}
exit(0);