En perl, mi proceso de bifurcación termina con "" Subrutina indefinida &main::fatal llamada en wrapper.pl"

En mi programa principal bifurco al niño usando:

pid = fork();
if ($pid == 0) {
   exec("$wrapper_file $hours_run");
   exit 0;
}

y hacer algún otro trabajo.

y en mi archivo contenedor:

$test_run = time();
while ($test_run < $hours_run) {
     do $node_grp_submit; # -------------------->script does some work
     sleep 30;
     $test_run = time();
}

El script funciona bien si lo ejecuto durante 4 horas.

Pero si ejecuto por períodos más largos (digamos de 5 a 8 horas), mi secuencia de comandos contenedora termina con Undefined subroutine &main::fatal called at wrapper.pl.

preguntado el 03 de mayo de 12 a las 17:05

Intenta también perl -MCarp::Always script.pl para intentar obtener un seguimiento de la pila. -

1 Respuestas

fatal() no es un perl incorporado, pero es un nombre de uso común para una subrutina llamada para errores insuperables ("fatales"). Aparentemente, algo en su secuencia de comandos está llamando a esta función, pero no existe.

¿Qué módulos estás usando en el script? Es posible que un autor haya hecho esto a propósito, para que pueda definir un fatal() y detectar el error. Si no puede averiguar dónde está sucediendo, puede agregar esto a wrapper.pl:

use YAML::XS;

sub fatal () {
    print Dump caller 1;
    print Dump @_;
    die "FATAL!";
}

Esto le dará algunos detalles sobre desde dónde se llamó al submarino (Dump caller 1) y lo que hay en la pila de argumentos.

contestado el 03 de mayo de 12 a las 18:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.