Intente seguir estos pasos:encuentre el pid del proceso del shell, puede usar un comando como:
ps -ef | grep <your_script_name>
-
Configuremos este pid en la variable de shell $PID. Encuentre todos los procesos secundarios de este $PID ejecutando el comando:
ps --ppid $PID
Puede encontrar uno o más (si, por ejemplo, está atascado en una serie de comandos canalizados). Repita este comando un par de veces. Si no cambia, significa que el script está atascado en cierto comando. En este caso, puede adjuntar el comando de rastreo al proceso secundario en ejecución:
sudo strace -p $PID
Esto le mostrará lo que se está ejecutando, ya sea un bucle indefinido (como leer de una tubería) o esperar algún evento que nunca sucede.
En caso de encontrar ps --ppid $PID
cambia, esto indica que su secuencia de comandos está avanzando pero está atascada en algún lugar, p. bucle local en el script. A partir de los comandos cambiantes, puede darte una pista de en qué lugar del script se repite.
Finalmente, un método muy simple para depurar un perl es usar el depurador de perl:
perl -d script.pl
Más:1, 2, 3, 4, 5
Para las próximas ejecuciones de su script, puede probar el paquete Devel::Trace.
De la descripción:"Este módulo imprimirá un mensaje de error estándar justo antes de que se ejecute cada línea".
Ejecutar con
perl -d:Trace program
o úsalo en tu script con
import Devel::Trace 'trace';
trace 'on'; # Enable
trace 'off'; # Disable