En perl, mi proceso de bifurcación termina con "" Subrutina indefinida &main::fatal llamada en wrapper.pl"
Frecuentes
Visto 462 veces
1
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
.
1 Respuestas
3
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 perl fork or haz tu propia pregunta.
Intenta también
perl -MCarp::Always script.pl
para intentar obtener un seguimiento de la pila. - ikegami