Tente seguir estes passos: - encontre o processo pid do shell, você pode usar um comando como:
ps -ef | grep <your_script_name>
-
Vamos definir este pid na variável do shell $ PID. Encontre todos os processos filhos deste $ PID executando o comando:
ps --ppid $PID
Você pode encontrar um ou mais (se, por exemplo, ele estiver preso em uma série de comandos em pipeline). Repita este comando algumas vezes. Se isso não mudar, significa que o script está preso em determinado comando. Nesse caso, você pode anexar o comando trace ao processo filho em execução:
sudo strace -p $PID
Isso mostrará o que está sendo executado, seja um loop indefinido (como a leitura de um pipe) ou aguardando algum evento que nunca acontece.
Caso você encontre ps --ppid $PID
alterações, isso indica que seu script está avançando, mas está preso em algum lugar, por exemplo, loop local no script. A partir da mudança de comandos, pode dar-lhe uma dica onde no script está em loop.
Finalmente, um método muito simples para depurar um perl é usar o depurador perl:
perl -d script.pl