Wald has asked for the wisdom of the Perl Monks concerning the following question:

I'm working on a scrip which idea is to create threads and simultaniously go thoughout a list of machines and check for things. It appears that when a thread goes into it's seperate termintal using "ssh ......" it gets stuck and I can't kill it. They also have a timer which doesn't seem to be working.

Here is the code:
sub call_cmd{ my $host = shift; my $cmd = shift; my $command = $cmd; my $message; open( DIR, "$cmd|" ) || die "No cmd: $cmd $!"; while(<DIR>){ $message.=$_; print "\n $host $message \n"; close DIR; } print "I'm here"; }

I get the output message which the ssh returns but i never get to the next print. This is the code for creating the threads.

foreach(@machines){ my $_ = threads->create(thread_creation,$_); $SIG{ALRM} = sub { $_->kill('ALRM') }; push(@threads,$_); } sub thread_creation(){ my $host = $_; eval{ $SIG{ALRM} = sub { die; }; alarm(5); ssh_con($host,"pblue"); alarm(0); } }
Thanks for the help.

Replies are listed 'Best First'.
Re: Threads getting stuck in ssh connection
by talexb (Chancellor) on Sep 30, 2013 at 14:25 UTC

    Well, I see code for call_cmd which seems to be trying to run a command locally and collect the output -- but it isn't called anywhere; I see a main body that runs through an array, creating threads incorrectly (you have a call to the thread creation routine where you should have a coderef); and finally, you call ssh_con from thread_creation, but it isn't defined anywhere.

    I'd recommend appending a complete script that exhibits the incorrect behaviour (don't delete the existing material), and of course remember to use strict and use warnings.

    Alex / talexb / Toronto

    Thanks PJ. We owe you so much. Groklaw -- RIP -- 2003 to 2013.