Essayez de suivre ces étapes :- trouvez le processus pid du shell, vous pouvez utiliser une commande comme :
ps -ef | grep <your_script_name>
-
Définissons ce pid dans la variable shell $PID. Trouvez tous les processus enfants de ce $PID en exécutant la commande :
ps --ppid $PID
Vous pouvez en trouver un ou plusieurs (si, par exemple, il est bloqué dans une série de commandes en pipeline). Répétez cette commande plusieurs fois. S'il ne change pas, cela signifie que le script est bloqué dans certaines commandes. Dans ce cas, vous pouvez attacher la commande trace au processus enfant en cours d'exécution :
sudo strace -p $PID
Cela vous montrera ce qui est en cours d'exécution, soit une boucle indéfinie (comme la lecture d'un tube), soit l'attente d'un événement qui ne se produit jamais.
Si vous trouvez ps --ppid $PID
changements, cela indique que votre script avance mais qu'il est bloqué quelque part, par ex. boucle locale dans le script. À partir des commandes changeantes, il peut vous donner un indice où dans le script il est en boucle.
Enfin, une méthode très simple pour déboguer un perl est d'utiliser le débogueur perl :
perl -d script.pl
Plus :1, 2, 3, 4, 5
Pour les prochaines exécutions de votre script, vous pouvez essayer le package Devel::Trace.
De la description :"Ce module affichera un message d'erreur standard juste avant l'exécution de chaque ligne."
Exécutez soit avec
perl -d:Trace program
ou utiliser dans votre script avec
import Devel::Trace 'trace';
trace 'on'; # Enable
trace 'off'; # Disable