Ejecutar comandos en distintos hilos
Publicado: 2014-06-05 05:53 @286
Hola a todos y gracias por atenderme.
Estoy intentando hacer un programa en Perl que me permita realizar ping a un rango determinado de IP. Estaba pensando, en vez de ir haciendo ping de una a una, dividir el nº de IP en 5 listas y pasarle dichas listas a 5 hilos para que cada uno se encarge de realizar el ping a todos los componentes de su lista. El problema que tengo es que me sale el siguiente error:
El código que uso es el siguiente y lo uso en Windows XP:
Para simplificar el código no pongo cómo se incluyen en cada una de las listas @lista1, @lista2, ..., @lista5
Estoy intentando hacer un programa en Perl que me permita realizar ping a un rango determinado de IP. Estaba pensando, en vez de ir haciendo ping de una a una, dividir el nº de IP en 5 listas y pasarle dichas listas a 5 hilos para que cada uno se encarge de realizar el ping a todos los componentes de su lista. El problema que tengo es que me sale el siguiente error:
Using text Syntax Highlighting
No ha hecho ping 192.168.1.1
No ha hecho ping 192.168.1.6
Comienza la ejecuci├│n del hilo
Thread 1 terminated abnormally: Undefined subroutine &main::0 called at pingh.pl line 73, <STDIN> line 2.
No ha hecho ping 192.168.1.2
No ha hecho ping 192.168.1.7
Can't locate object method "create" via package "trheads" (perhaps you forgot to load "trheads"?) at pingh.pl line 74, <STDIN>
Perl exited with active threads:
0 running and unjoined
1 finished and unjoined
0 running and detached
No ha hecho ping 192.168.1.6
Comienza la ejecuci├│n del hilo
Thread 1 terminated abnormally: Undefined subroutine &main::0 called at pingh.pl line 73, <STDIN> line 2.
No ha hecho ping 192.168.1.2
No ha hecho ping 192.168.1.7
Can't locate object method "create" via package "trheads" (perhaps you forgot to load "trheads"?) at pingh.pl line 74, <STDIN>
Perl exited with active threads:
0 running and unjoined
1 finished and unjoined
0 running and detached
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
El código que uso es el siguiente y lo uso en Windows XP:
Using perl Syntax Highlighting
- #!c:\perl\bin\perl.exe
- use Net::Ping::External qw(ping);
- use threads;
- use Config;
- $Config{useithreads} or die('Recompile Perl with threads to run this program.');
- print "Introduce IP de la red desde donde empezar: ";
- my $primera_ip = <STDIN>;
- chop($primera_ip);
- print "Introduce IP donde terminar: ";
- my $ultima_ip;
- $ultima_ip=<STDIN>;
- chop($ultima_ip);
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Para simplificar el código no pongo cómo se incluyen en cada una de las listas @lista1, @lista2, ..., @lista5
Using perl Syntax Highlighting
- my ($hilo1) = threads->create(&realizarping(@lista1));
- my ($hilo2) = trheads->create(&realizarping(@lista2));
- my ($hilo3) = trheads->create(&realizarping(@lista3));
- my ($hilo4) = threads->create(&realizarping(@lista4));
- my ($hilo5) = threads->create(&realizarping(@lista5));
- my @resultado1 = $hilo1->join();
- my @resultado2 = $hilo2->join();
- my @resultado3 = $hilo3->join();
- my @resultado4 = $hilo4->join();
- my @resultado5 = $hilo5->join();
- sub realizarping{
- print("Comienza la ejecución del hilo\n");
- foreach $direccion_ip (@_){
- my $alive = ping(host =>$direccion_ip, count => 3,timeout => 1 );
- if ($alive){
- print "Ping conseguido en $direccion_ip\n";
- } else {
- print "No ha hecho ping $direccion_ip\n";
- };
- }
- return ( 0 , 'Finalización correcta');
- }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4