Perlスクリプトは無限に実行されます。何が起こっているのかをデバッグする方法は?

Perlスクリプトは無限に実行されます。何が起こっているのかをデバッグする方法は?

Linuxシステムでは、cronジョブを介してPerlスクリプトを実行しています。しかし、時には(完全なケースの約1%)スクリプトが中断され、無期限に実行されることがあります。プロセスをリストすると、PIDであることがわかります。しかし、私はそれをすぐに殺したくなく、むしろ何が間違っているのか知りたいです。

スクリプトのどの行が実行されているかを表示する方法はありますか? PIDベースのスクリプトの段階的なデバッグに似ています。

ベストアンサー1

以下の手順に従ってください。 - シェルのプロセスpidを見つけるには、次のコマンドを使用できます。

  ps -ef | grep <your_script_name> 
  • シェル変数$ PIDにこのpidを設定してみましょう。以下を実行して、この$ PIDのすべての子プロセスを見つけます。

    ps --ppid $PID
    

1つ以上を見つけることができます(たとえば、一連のパイプ付きコマンドで停止した場合など)。このコマンドを数回繰り返します。変更しない場合は、スクリプトが一部のコマンドで停止していることを意味します。この場合、実行中の子プロセスにトレースコマンドを関連付けることができます。

    sudo strace -p $PID

これは、無限ループ(パイプから読み取るなど)や、決して発生しないいくつかのイベントを待つなど、実行中の内容を示しています。

変更が表示された場合、ps --ppid $PIDこれはスクリプトが前進しているが、スクリプト内のローカルループのようなどこかに停止していることを示します。コマンドを変更すると、スクリプトで繰り返す場所を尋ねるメッセージが表示されることがあります。

最後に、Perlをデバッグする非常に簡単な方法は、Perlデバッガを使用することです。

perl -d script.pl

もっと:12サム45

おすすめ記事