1

私のメインプログラムでは、次を使用して子をフォークします。

pid = fork();
if ($pid == 0) {
   exec("$wrapper_file $hours_run");
   exit 0;
}

そして他の仕事をします。

そして私のラッパーファイルで:

$test_run = time();
while ($test_run < $hours_run) {
     do $node_grp_submit; # -------------------->script does some work
     sleep 30;
     $test_run = time();
}

4 時間実行すると、スクリプトは正常に動作します。

しかし、長時間 (たとえば 5 ~ 8 時間) 実行すると、ラッパー スクリプトは Undefined subroutine &main::fatal called at wrapper.pl.

4

1 に答える 1

3

fatal()は perl の組み込みではありませんが、乗り越えられない (「致命的な」) エラーに対して呼び出されるサブルーチンの一般的に使用される名前です。どうやら、スクリプト内の何かがこの関数を呼び出していますが、存在しません。

スクリプトで使用しているモジュールは何ですか? 作成者は、fatal() を定義してエラーをキャッチできるように、意図的にこれを行った可能性があります。どこで発生しているのかわからない場合は、これを wrapper.pl に追加できます。

use YAML::XS;

sub fatal () {
    print Dump caller 1;
    print Dump @_;
    die "FATAL!";
}

これにより、サブルーチンが ( Dump caller 1) から呼び出された場所と引数スタックの内容に関する詳細が得られます。

于 2012-05-03T16:58:58.083 に答える