2012-05-03 17 views
1

私が使用して子プロセスをfork私のメインプログラムで:。」未定義のサブルーチン&メイン::致命的なwrapper.plで呼ばれる」

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

をし、他のいくつかの作業を行う

と私のラッパーファイルに:私は4時間のためにそれを実行する場合

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

スクリプトが正常に動作します

しかし、もし。私は長い時間(例えば5〜8時間)実行します。ラッパースクリプトは Undefined subroutine &main::fatal called at wrapper.plで終了します。

+0

また、スタックトレースを取得しようとすると 'perl -MCarp :: Always script.pl'を試してみてください。 – ikegami

答えて

3

fatal()は、perl組み込みではありませんが、insurmountable( "fatal")エラーと呼ばれるサブルーチンによく使用される名前です。どうやら、あなたのスクリプト内の何かがこの関数を呼び出していますが、それは存在しません。

スクリプトではどのモジュールを使用していますか?作者はこれを意図的に行ったかもしれないので、あなたは致命的な()を定義してエラーをキャッチすることができます。それが起こっている場所を把握することができない場合は、wrapper.plするためにこれを追加することができます。

use YAML::XS; 

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

これはあなたのサブは(Dump caller 1)から呼び出された場所に関するいくつかの詳細を与えると、引数スタックに何だろう。

関連する問題