どのように私はQX(コマンド)のタイムアウトを実装することができますか?

StackOverflow https://stackoverflow.com/questions/2498336

  •  21-09-2019
  •  | 
  •  

質問

どのように私は、コードのこの部分でタイムアウトを実装することができます:「hwinfo --usb」場合-command(コマンドを停止して)、一定時間後に何も返さなかったことから、返品またはダイを行いますサブ_usb_deviceます。

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


sub _usb_device {
    my @array;
    {
    local $/ = "";
    @array = qx( hwinfo --usb );
    }
    ...
    ...
}
役に立ちましたか?

解決

タイムアウトは、通常はアラームに。

で行われ

 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;
 }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top