Ho uno script perl che esegue una serie di script batch per i test di regressione. Voglio implementare un timeout sugli script batch. Al momento ho il seguente codice.allarme perl con sottoprocesso
my $pid = open CMD, "$cmd 2>&1 |";
eval {
# setup the alarm
local $SIG{ALRM} = sub { die "alarm\n" };
# alarm on the timeout
alarm $MAX_TIMEOUT;
log_output("setting alarm to $MAX_TIMEOUT\n");
# run our exe
while(<CMD>) {
$$out_ref .= $_;
}
$timeRemaining = alarm 0;
};
if ([email protected]) {
#catch the alarm, kill the executable
}
Il problema è che indipendentemente dall'impostazione del timeout massimo, l'allarme non viene mai attivato. Ho provato a usare Perl :: Unsafe :: Signals ma questo non ha aiutato.
È questo il modo migliore per eseguire gli script batch se voglio essere in grado di acquisire il loro output? C'è un altro modo in cui farei la stessa cosa che mi permetterebbe di usare gli allarmi, o c'è un altro metodo oltre agli allarmi per interrompere il programma?
Ho creato uno script di test per confermare che l'allarme funziona con la mia versione perl e windows, ma non funziona quando eseguo un comando come questo.
Sto eseguendo questo con activeperl 5.10.1 su Windows 7 x64.