Wie kann ich ein Timeout für eine qx (Befehl) implementieren?
Frage
Wie konnte ich in diesem Stück Code implementieren ein Timeout: Wenn der „hwinfo --usb“ -Kommando nichts nach einer gewissen Zeit zurückzukehren, (den Befehl stoppen und) tun, um eine Rückkehr oder sterben an der Unter _usb_device.
#!/usr/bin/env perl
use warnings;
use strict;
sub _usb_device {
my @array;
{
local $/ = "";
@array = qx( hwinfo --usb );
}
...
...
}
Lösung
Timeouts wird in der Regel getan mit Alarmen .
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;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow