+ -
当前位置:首页 → 问答吧 → 百思不得其解的多线程问题!!!

百思不得其解的多线程问题!!!

时间:2011-02-22

来源:互联网

本帖最后由 xxhacker 于 2011-02-22 18:30 编辑

本人想写一个多进程/多线程 连接主机的脚本,多进程没有问题,但是多线程确一直困扰着我,执行的时候程序一直卡那里,等待连接的返回值,我也不知道什么原因,特救助!!!!!
  1. #!/usr/bin/perl  
  2. use strict;
  3. use threads;
  4. use Net::SSH::Perl;
  5. #use Parallel::ForkManager;

  6. my @thread_array;
  7. my @clients = ("192.168.161.40","192.168.161.146");
  8. #my $max_procs = 10;
  9. #my $pm =  new Parallel::ForkManager($max_procs);
  10. my $cmd='uname -r';
  11. my $user='root';
  12. my $pass='pass';

  13. #foreach my $host (@clients){
  14. #        my $pid = $pm->start and next;
  15. #        &SSH($host);
  16. #        $pm->finish;
  17. #}  

  18. sub SSH
  19. {
  20.     my $host = shift;
  21. #    chomp( $host );  
  22.     my $ssh = Net::SSH::Perl->new( $host );
  23.     $ssh->login($user, $pass);
  24.     my($out) = $ssh->cmd($cmd);
  25.     print "$host\t$out";
  26. #   return $out;
  27. }

  28. sub Test  
  29. {
  30.     my $text = shift;
  31.     print "$text\n";
  32. }

  33. for(my $i = 0; $i <= $#clients; $i++){
  34.     $thread_array[$i] = threads->new(\&SSH, $clients[$i]);
  35. }

  36. foreach my $thread ( @thread_array )
  37. {
  38.     $thread -> join( );
  39. }
复制代码

作者: xxhacker   发布时间: 2011-02-22

my($out) = $ssh->cmd($cmd);

我记得是三个返回值吧? 有一个是判断命令执行成功,还有是cmd的返回值,还有一个什么的我忘记了

作者: dahe_1984   发布时间: 2011-02-23