Vie May 11, 2007 8:53 am
|
 |
javier_clv
Perlero Nuevo

|
Registrado: 11 May 2007
Mensajes: 3
|
|
| mytree.pl (pstree all unix) |
|
|
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:
| Perl: | #!/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>"; |
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 |
|
|
|

Vie May 11, 2007 2:29 pm
|
 |
creating021
Vive para Perl en Español

|
Registrado: 23 Feb 2006
Mensajes: 498
Ubicación: Frente al monitor
|
|
|
|
|
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 |
|

Vie May 11, 2007 2:47 pm
|
 |
Perl user
Maestro Honorario

|
Registrado: 03 Nov 2004
Mensajes: 385
|
|
| Re: mytree.pl (pstree all unix) |
|
|
| javier_clv escribió: | 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:
| Perl: | #!/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>"; |
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, |
|

Vie May 11, 2007 2:48 pm
|
 |
javier_clv
Perlero Nuevo

|
Registrado: 11 May 2007
Mensajes: 3
|
|
|
|
|
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!!! |
|

Vie May 11, 2007 2:52 pm
|
 |
javier_clv
Perlero Nuevo

|
Registrado: 11 May 2007
Mensajes: 3
|
|
| Re: mytree.pl (pstree all unix) |
|
|
| Perl user escribió: | | javier_clv escribió: | 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:
| Perl: | #!/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>"; |
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: |
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 |
|
|

Vie May 11, 2007 5:01 pm
|
 |
creating021
Vive para Perl en Español

|
Registrado: 23 Feb 2006
Mensajes: 498
Ubicación: Frente al monitor
|
|
|
|
|
| javier_clv escribió: | 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. |
|

Powered by phpBB © 2001, 2005 phpBB Group
|