Hola!

Registrándote como bakuno podrás publicar, compartir y comunicarte en privado con otros bakuos :D

Regístrame ya!

contador de peso de archivos en ejecucion

neohagane

Becerro
Desde
13 Dic 2008
Mensajes
6
chicos recuro a ustedes soy nuevo programando y tengo que hacer el siguiente programa

escriba un programa en perl que reciba dor parametros:
- un nombre de usuario
- un pid (opcional)

el sistema debe mostrar la cantidad de memoria total que ocuapan los procesos que le pertenecen al usuario

si es ingresando el pid, solo se debe mostrar la memoria total
de los procesos que son hijos del pid ingresado
Código:
#!/usr/bin/perl
use v5.14;
#use strict;
#use warnings;
 
## Constantes
my @tamanos  = qw(reservado total virtual);
my $ps_sizes = 'rss,size,vsize';

## Argumentos
@ARGV > 0 or die "Uso: $0 <nombre de usuario> [<pid proceso padre>]\n";
 
## Nombre de usuario
my $usuario = shift;
 
## Obtenemos la lista de procesos del usuario
my @procesos = qx(ps h --User $usuario -o pid,$ps_sizes);

my %procesos= map
{
	my @c = split;
	$c[0] => [ @c[1..3] ];
}
@procesos;
 
## ppid que tenemos que analizar
my $ppid = shift // '';

my @pids = keys %procesos;
 
if ($ppid) 
{
	my @procesos_ppid = qx(ps h --ppid $ppid -o pid);
	@procesos_ppid = map { split } @procesos_ppid;
	@pids = grep { $_ ~~ @procesos_ppid } @pids;
}
 
## Hacemos las sumas
my @sizes;
 
for my $pid (@pids)
{
    $sizes[$_] += $procesos{$pid}[$_] for 0 .. $#tamanos;
}
 
## Informamos
say "El usuario [$usuario] tiene ", scalar(@procesos), " procesos.";
if ($ppid)
{
    say "Filtrando los procesos hijos del proceso [$ppid], quedan ", scalar(@pids), " procesos.";
}
say "Ocupación de espacio de los procesos:";
 
while (my($i, $v) = each @tamanos) 
{
    printf "Espacio %-10s: %d Kb\n", $v, $sizes[$i];
}

tengo el siguiente problema que al momento de enviar el pid por parametro no me cuenta los procesos que tiene dependientes no hace nada muestra todo en 0 si envio el usuario en ejecucion funciona a la perfeccion


espero me puedan ayudar

Saludos !!
 
Volver
Arriba