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 $/; 所以上面的问题不会发生
阅读(966) | 评论(0) | 转发(0) |