Chinaunix首页 | 论坛 | 博客
  • 博客访问: 203986
  • 博文数量: 39
  • 博客积分: 1057
  • 博客等级: 准尉
  • 技术积分: 926
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-27 20:13
文章分类

全部博文(39)

文章存档

2012年(24)

2011年(15)

分类: Python/Ruby

2012-03-19 11:58:55

MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0

这里利用ALRM信号。注意一点是eval中的die只会退出eval块并将原因保存在$@中,后续程序通过检测$@来做出更有意思的决定。


点击(此处)折叠或打开

  1. # 超时处理
  2. # 来源: Lover的工具小屋
  3. # author: Lover

  4. local $SIG{ALRM} = sub {alarm 0;die 'TIMEOUT';};
  5. my $timeout = 3;
  6. eval{
  7.         alarm $timeout;
  8.         #一个类似linux shell窗口中的提示符
  9.         print("[root\@$target ~]# $command\n");
  10.         #实例化一个$pssh对象用于远程执行命令
  11.         my $pssh = Net::OpenSSH::Parallel->new   (reconnections=>2,connections=>90,workers=>45);
  12.                 $pssh->add_host("root\@$target");
  13.                 $pssh->push('*',command=>$command);
  14.         my $status = $pssh->run;

  15.         if ($status != 1){
  16.                 print("[root\@$target]# $command\n");
  17.                 die "Command Exec Error: $!";
  18.         }
  19.         # 如果之前的代码在规定的时间内执行完毕,排除这个定时炸弹
  20.         alarm(0);
  21. };

  22. if ($@ =~ /TIMEOUT/){
  23.         die 'Execute Command Timeout';
  24. }

阅读(2768) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~