Página 1 de 1

Nombre de script que invoca a otro script

NotaPublicado: 2010-01-21 11:18 @512
por Logan
Hola.

¿Es posible saber desde qué script está siendo ejecutado un script de Perl?

Ejemplo: En mi script padre.pl llamo a mi script hijo.pl, ¿cómo puedo saber en hijo.pl el nombre del script que lo llamó?

Gracias

Re: Nombre de script que invoca a otro script

NotaPublicado: 2010-01-21 13:19 @596
por erv-Z
No entendí bien, pero bueno.

Para saber el nombre del script que se está ejecutando se usa $0. Ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
print "perl $0\n";
__END__
perl t.pl
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Saludos.

Re: Nombre de script que invoca a otro script

NotaPublicado: 2010-01-21 13:26 @601
por explorer
No, no es eso...

Está preguntando si, dado un programa Perl que llama a otro programa Perl, ¿cómo sabe el segundo programa el nombre del primero?

Dicho de otra manera: ¿cómo sabe un proceso hijo el nombre de su padre?

Esto lo he mirado en perlvar, y me parece que la solución depende mucho del sistema operativo.

Re: Nombre de script que invoca a otro script

NotaPublicado: 2010-01-21 13:44 @614
por explorer
Esta es una posibilidad, para Linux:

Programa uno.pl
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. system("./dos.pl");  # ejecutamos el segundo
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Programa dos.pl
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. my $padre_id = getppid();
  3. my $cmdline = qx(cat /proc/$padre_id/cmdline);  # valores separados por \0
  4. my @cmdline = split /\0/, $cmdline;
  5. print join q[ ], @cmdline;                      # /usr/bin/perl ./uno.pl
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


getppid() devuelve el pid del proceso padre que ejecutó al nuestro. Y de ahí accedemos a su información.

Re: Nombre de script que invoca a otro script

NotaPublicado: 2010-01-21 17:02 @752
por Logan
Hola explorer.

Muchas gracias por tu respuesta, copié el código escribiste y tengo una duda en la siguiente línea:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $cmdline = qx(cat /proc/$padre_id/cmdline);  # valores separados por \0
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


ya que me marca el siguiente error:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
cat: cannot open /proc/20897/cmdline
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
el directorio /proc/20897/ sí existe pero cmdline no. ¿A qué se debe, cuál es el problema?

Gracias, saludos

Re: Nombre de script que invoca a otro script

NotaPublicado: 2010-01-21 17:24 @767
por explorer
Pues no lo sé... tengo varios Linux a mi alrededor:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
2.6.18-6-686 #1 SMP, Debian 4         : sí lo tiene
2.6.22.18-0.2-default, OpenSuse 10.3  : sí lo tiene
2.6.21-omap1, Nokia Maemo 2008        : sí lo tiene
2.6.28-omap1, Nokia Maemo 5           : sí lo tiene
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Es posible que sea debido al número de versión del kernel.

Re: Nombre de script que invoca a otro script

NotaPublicado: 2010-01-21 18:02 @793
por salva
El módulo Proc::ProcessTable permite acceder a la información de los procesos de manera compatible.

Re: Nombre de script que invoca a otro script

NotaPublicado: 2010-01-22 15:52 @703
por morago
La opción de salva es buena:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Proc::ProcessTable;
  2.  
  3. $tp = new Proc::ProcessTable;
  4.  
  5. foreach $p ( @{$tp->table} )
  6.    { print $p->cmndline if ( $p->pid =~ /$padre_id/ ); }
  7.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Re: Nombre de script que invoca a otro script

NotaPublicado: 2010-01-22 17:23 @766
por salva
morago escribiste:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$p->pid =~ /$padre_id/
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

!Ten cuidado con esa expresión regular que podría encajar con cosas que no son la que estás buscando! O la anclas o usas simplemente
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$p->pid == $padre_id
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Re: Nombre de script que invoca a otro script

NotaPublicado: 2010-01-22 18:32 @814
por Logan
Hola, muchas gracias. El sistema operativo que manejo es Solaris 5.10. Con obtener el id del proceso me fue posible obtener el nombre utilizando el siguiente comando de sistema operativo.
Sintáxis: [ Descargar ] [ Ocultar ]
  1. ps -ef 


Gracias a todos. :)