GNU/Linux >> Linux の 問題 >  >> Linux

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

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

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

    ps --ppid $PID
    

1 つ以上が見つかる場合があります (たとえば、パイプライン化された一連のコマンドでスタックしている場合)。このコマンドを数回繰り返します。変更されない場合、これはスクリプトが特定のコマンドでスタックしていることを意味します。この場合、実行中の子プロセスに trace コマンドを追加できます:

    sudo strace -p $PID

これにより、何が実行されているか、無限ループ (パイプからの読み取りなど)、または発生しないイベントを待機していることがわかります。

ps --ppid $PID を見つけた場合 これは、スクリプトが進んでいるが、どこかで動かなくなっていることを示しています。スクリプトのローカル ループ。変化するコマンドから、スクリプトのどこでループしているかのヒントを得ることができます。

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

perl -d script.pl

もっと:1, 2, 3, 4, 5


スクリプトの次の実行では、パッケージ Devel::Trace を試すことができます。

説明から:「このモジュールは、各行が実行される直前に標準エラーにメッセージを出力します。」

どちらかで実行

perl -d:Trace program

またはスクリプトで

import Devel::Trace 'trace';

trace 'on';                 # Enable
trace 'off';                # Disable

Linux
  1. シェル スクリプトとはシェル スクリプトの作成方法

  2. Ruby スクリプトのインスタンスが一度に 1 つだけ実行されるようにするにはどうすればよいですか?

  3. LinuxでPerlスクリプトをシステムデーモンとして実行するにはどうすればよいですか?

  1. 実行している Linux のバージョンを確認するにはどうすればよいですか?

  2. 送信されたHTTPリクエストをデバッグして応答を待つ方法は?

  3. 実行中の Linux のバージョンを確認するにはどうすればよいですか?

  1. 実行しているLinuxバージョンは何ですか?調べる方法は次のとおりです

  2. LinuxのbashコマンドをPERLスクリプトで実行する方法は?

  3. Sys ::Detector ::Virtualization Perlスクリプトを使用して仮想化を検出する方法は?