MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0
这里利用ALRM信号。注意一点是eval中的die只会退出eval块并将原因保存在$@中,后续程序通过检测$@来做出更有意思的决定。
- # 超时处理
- # 来源: Lover的工具小屋
- # author: Lover
- local $SIG{ALRM} = sub {alarm 0;die 'TIMEOUT';};
- my $timeout = 3;
- eval{
- alarm $timeout;
- #一个类似linux shell窗口中的提示符
- print("[root\@$target ~]# $command\n");
- #实例化一个$pssh对象用于远程执行命令
- my $pssh = Net::OpenSSH::Parallel->new (reconnections=>2,connections=>90,workers=>45);
- $pssh->add_host("root\@$target");
- $pssh->push('*',command=>$command);
- my $status = $pssh->run;
- if ($status != 1){
- print("[root\@$target]# $command\n");
- die "Command Exec Error: $!";
- }
- # 如果之前的代码在规定的时间内执行完毕,排除这个定时炸弹
- alarm(0);
- };
- if ($@ =~ /TIMEOUT/){
- die 'Execute Command Timeout';
- }
阅读(2806) | 评论(0) | 转发(0) |