Tengo un script perl que ejecuta una serie de scripts por lotes para pruebas de regresión. Quiero implementar un tiempo de espera en los scripts por lotes. Actualmente tengo el siguiente código.alarma perl con subproceso
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
}
El problema es que no importa lo que se propuso el tiempo de espera máximo para, la alarma se dispara nunca más. Intenté usar Perl :: Unsafe :: Signals, pero eso no ayudó.
¿Es esta la mejor manera de ejecutar los scripts por lotes si quiero poder capturar su salida? ¿Hay alguna otra manera de hacer lo mismo que me permita usar alarmas, o hay otro método además de alarmas para agotar el tiempo del programa?
He creado un script de prueba para confirmar que la alarma funciona con mi versión de Perl y Windows, pero no funciona cuando ejecuto un comando como este.
Estoy ejecutando esto con activeperl 5.10.1 en windows 7 x64.