|
|||||||||||||||||||||||||||
sslug@sslug writes:
> Jeg ville gerne kunne kalde et simpelt kommandolinie program, men da jeg
> ikke kan tillade mig at vente i evigheder hvis programmet skulle fejle, har
> jeg brug for at kunne afbryde programmet efter en periode.
>
> Jeg havde tænkt mig noget i den her stil:
>
> my $alarm = 0;
> local $SIG{ALRM} = sub { $alarm=1; };
> alarm (5);
> eval { `sleep 10` };
> print "timed out\n" if $alarm;
>
> Og programstumpen finder godt nok ud af at programmet et timet ud, men det
> enter stadigvæk - jeg kunne kalde exit fra signal håndterings rutinen, men
> programmet skal kunne arbejde videre efter en timeout.
> Og nu kan jeg delsværre ikke komme i tanke om nogen simpel måde at
> implementere det på, men det håber jeg at der er andre på listen der kan.
Husk på at qx{ stuff } eksekverer i en subshell (ny proces) og dit
SIGALRM bliver ikke leveret denne. Så hvis du vil lave det trick skal
du nok lave en fork() og exec() og få pid'en på den proces der laver
"sleep 10" og kalde kill() fra din signal håndtering.
--
Christian Hemmingsen
|
||||||||||||||
|
||||||||||||||