• Publicidad

mytree.pl (pstree all unix)

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

mytree.pl (pstree all unix)

Notapor javier_clv » 2007-05-11 09:53 @453

Hola que tal, estoy tratando de hacer un script en que el resultado sea el mismo que arroja el comando pstree en Linux o ptree en Solaris.

La idea de armar un árbol de directorios es para otro script que no viene al caso detallarlo.

La cuestión es que buscando en internet no encontré ningún script en Perl similar por lo que me propuse a armarlo.

La idea es que sea compatible con (Linux, AIX, HP-UX, Solaris, Tru64, etc).

Va el script:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/bin/perl

use strict;

# armo arbol de procesos
my @ProcessOS = qx(ps -ef);
my @estructura; #Array multidimensional, en este caso seria de 3d

foreach (@ProcessOS) {
        $_ =~ /[d*w*]s+(d*)s+(d*)s+d{1,5}s+[d*:*w*s+d{1,2}]*W{2}s+[d*:*]*s+([-*:*[*]*/*w*d*]*)s*/;
        push (@estructura, [$1, $2, $3]) if ($1);
}

my ($x,$y);
print '<table border="1">';

foreach $x (0..@estructura-1){
        print "<tr>n";
        foreach $y (0..@{$estructura[$x]}-1){
                print "<td> $estructura[$x][$y] </td>n";
        }
        print "</tr>nn";
}

print "</table>";
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


En este caso se guardan en el array de 3D los PID PPID CMD del OS.
Las dudas son 2.

Esta línea: push (@estructura, [$1, $2, $3]) if ($1);
¿Es optima? ¿Existe una más óptima?

Y por último, ¿a alguien se le ocurre un algoritmo para armar el árbol? Ya tenemos los datos pero si me dan una mano sería bueno.

Saludos
javier_clv
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2007-05-11 08:41 @403

Publicidad

Notapor creating021 » 2007-05-11 15:29 @686

Lo primero:
Como sacas los procesos no me suena... sí ejecutas como root (el script) podés sacar los precesos por medio de /proc pero para tener un desarrollo rápido y más limpio usa Proc::ProcessTable
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Re: mytree.pl (pstree all unix)

Notapor Perl user » 2007-05-11 15:47 @699

javier_clv escribiste:Hola que tal, estoy tratando de hacer un script en que el resultado sea el mismo que arroja el comando pstree en Linux o ptree en Solaris.

La idea de armar un árbol de directorios es para otro script que no viene al caso detallarlo.

La cuestión es que buscando en internet no encontré ningún script en Perl similar por lo que me propuse a armarlo.

La idea es que sea compatible con (Linux, AIX, HP-UX, Solaris, Tru64, etc).

Va el script:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/bin/perl

use strict;

# armo arbol de procesos
my @ProcessOS = qx(ps -ef);
my @estructura; #Array multidimensional, en este caso seria de 3d

foreach (@ProcessOS) {
        $_ =~ /[d*w*]s+(d*)s+(d*)s+d{1,5}s+[d*:*w*s+d{1,2}]*W{2}s+[d*:*]*s+([-*:*[*]*/*w*d*]*)s*/;
        push (@estructura, [$1, $2, $3]) if ($1);
}

my ($x,$y);
print '<table border="1">';

foreach $x (0..@estructura-1){
        print "<tr>n";
        foreach $y (0..@{$estructura[$x]}-1){
                print "<td> $estructura[$x][$y] </td>n";
        }
        print "</tr>nn";
}

print "</table>";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


En este caso se guardan en el array de 3D los PID PPID CMD del OS.
Las dudas son 2.

Esta línea: push (@estructura, [$1, $2, $3]) if ($1);
¿Es optima? ¿Existe una más óptima?

Y por último, ¿a alguien se le ocurre un algoritmo para armar el árbol? Ya tenemos los datos pero si me dan una mano sería bueno.

Saludos


Qué tipo de "arbol" necesitas? o cuál es el concepto de "árbol" que utilizas para este contexto?

Saludos,
Marco A. Manzo
[email protected]
http://www.unixmonkeys.com/amnesiac/
Perl Programming Language
Perl user
Maestro honorario
Maestro honorario
 
Mensajes: 271
Registrado: 2004-11-03 21:11 @924

Notapor javier_clv » 2007-05-11 15:48 @700

Claro puedo usar el modulo Proc pero siempre y cuando lo ejecute como root y la idea es que todos los usuarios puedan ejecutar esto sin problemas, sin recurrir a modulos y/o setear SUID.

La idea es que este script arme de la salida del comando ps de unix un arbol de procesos.
En las primeras lineas ves que se hace qx(ps -ef) en unix te trae todos los proceso activos del sistema.
Este comando es utilizado por todos los users y de ahi se puede jugar con el script.

Igualmente agradezco tu respuesta y lo tendre en cuenta para proximos scripts.
De cualquier manera, se te ocurre algun modo de armar el arbol de proceso?
Si ejecutas este script tal cual esta en un linux o Unix este te arma un html donde veras como primer los PID, segundo campo PPID y por ultimo los CMD ejecutados.

La idea es que todos los PPID nacen de un PPID y cada PID y PPID tienen asociado un CMD.

Saludos!!!
javier_clv
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2007-05-11 08:41 @403

Re: mytree.pl (pstree all unix)

Notapor javier_clv » 2007-05-11 15:52 @703

Perl user escribiste:
javier_clv escribiste:Hola que tal, estoy tratando de hacer un script en que el resultado sea el mismo que arroja el comando pstree en Linux o ptree en Solaris.

La idea de armar un árbol de directorios es para otro script que no viene al caso detallarlo.

La cuestión es que buscando en internet no encontré ningún script en Perl similar por lo que me propuse a armarlo.

La idea es que sea compatible con (Linux, AIX, HP-UX, Solaris, Tru64, etc).

Va el script:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/bin/perl

use strict;

# armo arbol de procesos
my @ProcessOS = qx(ps -ef);
my @estructura; #Array multidimensional, en este caso seria de 3d

foreach (@ProcessOS) {
        $_ =~ /[d*w*]s+(d*)s+(d*)s+d{1,5}s+[d*:*w*s+d{1,2}]*W{2}s+[d*:*]*s+([-*:*[*]*/*w*d*]*)s*/;
        push (@estructura, [$1, $2, $3]) if ($1);
}

my ($x,$y);
print '<table border="1">';

foreach $x (0..@estructura-1){
        print "<tr>n";
        foreach $y (0..@{$estructura[$x]}-1){
                print "<td> $estructura[$x][$y] </td>n";
        }
        print "</tr>nn";
}

print "</table>";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


En este caso se guardan en el array de 3D los PID PPID CMD del OS.
Las dudas son 2.

Esta línea: push (@estructura, [$1, $2, $3]) if ($1);
¿Es optima? ¿Existe una más óptima?

Y por último, ¿a alguien se le ocurre un algoritmo para armar el árbol? Ya tenemos los datos pero si me dan una mano sería bueno.

Saludos


Qué tipo de "arbol" necesitas? o cuál es el concepto de "árbol" que utilizas para este contexto?

Saludos,


La idea es armar algo parecido a un pstree en linux (esto tambien existe en solaris, pero se llama ptree el binario).

Por ejemplo la salida del comando pstree en linux es la siguiente, la idea del script mytree.pl es que haga lo mismo.

Código: Seleccionar todo
user1@Linux:~> pstree
init─┬─acpid
     ├─auditd───{auditd}
     ├─cron
     ├─cupsd
     ├─2*[dbus-daemon]
     ├─dcopserver
     ├─events/0
     ├─gconfd-2
     ├─hald───hald-runner─┬─hald-addon-acpi
     │                    ├─hald-addon-cpuf
     │                    └─hald-addon-stor
     ├─ifplugd
     ├─kbluetoothd
     ├─kded
     ├─kdeinit─┬─amarokapp─┬─ruby
     │         │           └─5*[{amarokapp}]
     │         ├─firefox───firefox-bin───10*[{firefox-bin}]
     │         ├─kate───bash
     │         ├─kio_file
     │         ├─klauncher
     │         ├─konqueror
     │         ├─konsole───bash───pstree
     │         └─kwin
     ├─kdesktop
     ├─kdesud
     ├─kdm─┬─Xorg
     │     └─kdm───startkde─┬─kwrapper
     │                      └─ssh-agent
     ├─khelper
     ├─kicker
     ├─kio_uiserver
     ├─klogd
     ├─kmix
     ├─knetworkmanager
     ├─knodemgrd_0
     ├─knotes
     ├─knotify
     ├─kpowersave
     ├─ksmserver
     ├─ksoftirqd/0
     ├─kthread─┬─aio/0
     │         ├─cqueue/0
     │         ├─kacpid
     │         ├─kauditd
     │         ├─kblockd/0
     │         ├─khpsbpkt
     │         ├─khubd
     │         ├─2*[kjournald]
     │         ├─kondemand/0
     │         ├─kpsmoused
     │         ├─kseriod
     │         ├─kswapd0
     │         ├─pccardd
     │         └─2*[pdflush]
     ├─migration/0
     ├─6*[mingetty]
     ├─nscd───6*[{nscd}]
     ├─polkitd
     ├─portmap
     ├─powersaved
     ├─resmgrd
     ├─smpppd
     ├─sshd
     ├─start_kdeinit
     ├─syslog-ng
     └─udevd
javier_clv
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2007-05-11 08:41 @403

Notapor creating021 » 2007-05-11 18:01 @792

javier_clv escribiste:Claro puedo usar el modulo Proc pero siempre y cuando lo ejecute como root y la idea es que todos los usuarios puedan ejecutar esto sin problemas, sin recurrir a modulos y/o setear SUID.

La idea es que este script arme de la salida del comando ps de unix un arbol de procesos.
En las primeras lineas ves que se hace qx(ps -ef) en unix te trae todos los proceso activos del sistema.
Este comando es utilizado por todos los users y de ahi se puede jugar con el script.

Igualmente agradezco tu respuesta y lo tendre en cuenta para proximos scripts.
De cualquier manera, se te ocurre algun modo de armar el arbol de proceso?
Si ejecutas este script tal cual esta en un linux o Unix este te arma un html donde veras como primer los PID, segundo campo PPID y por ultimo los CMD ejecutados.

La idea es que todos los PPID nacen de un PPID y cada PID y PPID tienen asociado un CMD.

Saludos!!!


Para poder hacer ese árbol tenes que saber el ppid (Parent Process ID)... creo que es mucho mejor usar el módulo.

Buscas el ppid de cada proceso y lo pones en un hash (proceso => ppid) y según eso imprimis el árbol.

Lo bueno del módulo es que soporta todo UNIX/Unix-Like y tiene muchas funciones.
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 6 invitados

cron