run command

来源:转载

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 ([email protected]) {
                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 $/;  所以上面的问题不会发生


分享给朋友:
您可能感兴趣的文章:
随机阅读: