亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2984 | 回復(fù): 5
打印 上一主題 下一主題

求教:線程問題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2011-04-14 16:06 |只看該作者 |倒序瀏覽
最近學(xué)習(xí)線程,編寫測試程序manage.pl,利用線程訪問srv.list中的服務(wù)器,取得uname -a 的值,但是提示
Thread 1 terminated abnormally: Not a CODE reference at manage.pl line 17.

另外如果列表中某臺服務(wù)器不能訪問,程序會中斷
并提示
Permission denied at manage.pl line 35
Perl exited with active threads:
        0 running and unjoined
        6 finished and unjoined
        0 running and detached
  1. #!/usr/bin/perl
  2. use strict;
  3. use Net::SSH::Perl;
  4. use threads;
  5. use Thread::Queue;

  6. my $queue = new Thread::Queue;
  7. my $max = 10;

  8. open my $IN, '<', 'srv.list' or die "Don't open File!\n";
  9. while (<$IN>)
  10. {
  11.    $queue->enqueue($_);
  12. }
  13. close $IN;

  14. for ( my $n = 0; $n < $max; $n++)
  15. {
  16.     threads->create(\&exec_command());
  17. }

  18. foreach my $th (threads->list(threads::all))
  19. {
  20.         $th->detach();
  21. }

  22. sub exec_command()
  23. {
  24.    my $host = $queue->dequeue();
  25.    my $user = 'zoomi';
  26.    my $pass = 'zoomi-init';
  27.    my $cmd='uname -a';

  28.    my $ssh = Net::SSH::Perl->new($host);
  29.    $ssh->login($user, $pass);
  30.    my($stdout, $stderr, $exit) = $ssh->cmd($cmd);

  31.    if ($exit == 0) {
  32.       print "$host -> $stdout";
  33.    } else {
  34.       print "$host -> $stderr";
  35.    }
  36. }
復(fù)制代碼
  1. 10.60.30.15
  2. -> Linux zoomi-30-15 2.6.31-14-generic #48-Ubuntu SMP Fri Oct 16 14:05:01 UTC 2009 x86_64 GNU/Linux
  3. Thread 1 terminated abnormally: Not a CODE reference at manage.pl line 17.
  4. 10.60.30.16
  5. -> Linux zoomi-30-16 2.6.31-23-server #74-Ubuntu SMP Mon Feb 28 22:32:34 UTC 2011 x86_64 GNU/Linux
  6. Thread 2 terminated abnormally: Not a CODE reference at manage.pl line 17.
  7. 10.60.30.17
  8. -> Linux zoomi-30-17 2.6.31-14-generic #48-Ubuntu SMP Fri Oct 16 14:05:01 UTC 2009 x86_64 GNU/Linux
  9. Thread 3 terminated abnormally: Not a CODE reference at manage.pl line 17.
  10. 10.60.30.18
  11. -> Linux zoomi-30-18 2.6.31-14-server #48-Ubuntu SMP Fri Oct 16 15:07:34 UTC 2009 x86_64 GNU/Linux
  12. Thread 4 terminated abnormally: Not a CODE reference at manage.pl line 17.
  13. 10.60.30.19
  14. -> Linux ubuntu 2.6.31-14-server #48-Ubuntu SMP Fri Oct 16 15:07:34 UTC 2009 x86_64 GNU/Linux
  15. Thread 5 terminated abnormally: Not a CODE reference at manage.pl line 17.
  16. 10.60.30.25
  17. -> Linux zoomi-30-25 2.6.31-14-server #48-Ubuntu SMP Fri Oct 16 15:07:34 UTC 2009 x86_64 GNU/Linux
  18. Thread 6 terminated abnormally: Not a CODE reference at manage.pl line 17.
  19. 10.60.30.27
  20. -> Linux server-A-test 2.6.31-14-server #48-Ubuntu SMP Fri Oct 16 15:07:34 UTC 2009 x86_64 GNU/Linux
  21. Thread 7 terminated abnormally: Not a CODE reference at manage.pl line 17.
  22. 10.60.30.28
  23. -> Linux zoomi-30-28 2.6.31-14-generic #48-Ubuntu SMP Fri Oct 16 14:05:01 UTC 2009 x86_64 GNU/Linux
  24. Thread 8 terminated abnormally: Not a CODE reference at manage.pl line 17.
  25. 10.60.30.29
  26. -> Linux server-B-test 2.6.31-14-server #48-Ubuntu SMP Fri Oct 16 15:07:34 UTC 2009 x86_64 GNU/Linux
  27. Thread 9 terminated abnormally: Not a CODE reference at manage.pl line 17.
復(fù)制代碼

論壇徽章:
0
2 [報告]
發(fā)表于 2011-04-15 02:29 |只看該作者
本帖最后由 albertd 于 2011-04-15 02:31 編輯
  1. sub exec_command()
  2. {
  3.    my $user = 'xxxxx';
  4.    my $pass = 'xxxxx';
  5.    my $cmd='uname -a';

  6.    while (my $host = $queue->dequeue())
  7.        {
  8.            eval {my $ssh = Net::SSH::Perl->new($host);
  9.                $ssh->login($user, $pass);
  10.                my($stdout, $stderr, $exit) = $ssh->cmd($cmd);

  11.                if ($exit == 0) {
  12.                print "$host -> $stdout";
  13.                } else {
  14.                print "$host -> $stderr";
  15.                }
  16.            };
  17.         warn $@ if $@;
  18.    }
  19. }
復(fù)制代碼
Should fix the issues.

論壇徽章:
0
3 [報告]
發(fā)表于 2011-04-15 09:43 |只看該作者
Should fix the issues.
albertd 發(fā)表于 2011-04-15 02:29


那個報錯產(chǎn)生的原因是什么?還有我的程序運行后,不能正常退出

論壇徽章:
0
4 [報告]
發(fā)表于 2011-04-16 22:07 |只看該作者
本帖最后由 ykredrum 于 2011-04-16 22:24 編輯

  1. for ( my $n = 0; $n < $max; $n++)

  2. {

  3.     threads->create(\&exec_command());

  4. }
復(fù)制代碼
\&exec_command()
似乎多了對括號吧

應(yīng)該是 \&exec_command

論壇徽章:
0
5 [報告]
發(fā)表于 2011-04-16 22:23 |只看該作者
對了
最好用個
Thread::Semaphore模塊
控制一下線程,確保線程都完成了任務(wù),主線程才退出
不然閃一下就沒有了
模塊里有具體例子

論壇徽章:
0
6 [報告]
發(fā)表于 2011-04-17 10:16 |只看該作者
我現(xiàn)在也在學(xué)線程啊。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP