run command

首页 | 新闻 | 交流 | 问吧 | 文档 | 手册 | 下载 | 博客

run command

作者:  时间: 2010-11-16

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 $/;  所以上面的问题不会发生