Chinaunix首页 | 论坛 | 博客
  • 博客访问: 92197
  • 博文数量: 26
  • 博客积分: 1050
  • 博客等级: 少尉
  • 技术积分: 276
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-05 20:44
文章分类

全部博文(26)

文章存档

2010年(26)

我的朋友

分类:

2010-11-16 15:13:01

sub run_task {
        no strict 'subs';
        my $cmd = shift;
        my $cpid;
        my $output;
        my $timeout = $TIMEOUT || 60;
        eval {
                local $SIG{ALRM} = sub { die "Caught alarm signal\n" };
                alarm($timeout);
                $cpid = open(CMD,"$cmd 2>&1 |");
                local $/;
                $output = <CMD>;
                alarm(0);
        };
        if ($@) {
                kill TERM, $cpid if ($cpid);
                return undef;
        }
    elsif (close(CMD)) {
        return $output ? $output : 1;
    }
        else {
        if ($output =~m/\w+/) {
                        return $output;
                }
                #return 0;

        }
}


如果这个传入的$cmd是一个类似“find -type f" 这种类型的输出是一个间断性的一个过程的话,
前面的 $output 不会得到所有的输出。所以应该用以下的代码:
 while(<CMD>){
    $output.=$_;
  }

因为用了  :
local $/;  所以上面的问题不会发生

阅读(960) | 评论(0) | 转发(0) |
0

上一篇:Perl Tips

下一篇:Find: the hard link files

给主人留下些什么吧!~~