如何实现qx(命令)的超时?

时间:2010-03-23 08:03:57

标签: perl timeout qx

如何在这段代码中实现超时:如果“hwinfo --usb”命令在一定时间后没有返回任何内容,(停止命令并且)执行返回或死亡sub _usb_device。

#!/usr/bin/env perl
use warnings; 
use strict;


sub _usb_device {
    my @array;
    {
    local $/ = "";
    @array = qx( hwinfo --usb );
    }
    ...
    ...
}

1 个答案:

答案 0 :(得分:8)

超时通常使用alarms完成。


 sub _usb_device 
 {
    # Scope array
    my @array;

    # Try shell command
    eval
    {
        local $SIG{ALRM} = sub { die "timeout\n" };
        local $/ = "";
        alarm 10;
        @array = qx( hwinfo --usb );
        alarm 0;
    };

    # Catch and rethrow non timout errors
    die $@ if $@ && $@ ne "timeout\n";

    # Done
    return @array;
 }