- Tema Autor
- #1
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
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 !!
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 !!