2012-05-03 40 views
1

在我的主要程序終止我用叉子叉兒:在Perl中我的叉子過程與「」未定義子程序及主要::致命叫在wrapper.pl」

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

+0

另外嘗試'perl -MCarp :: Always script.pl'嘗試獲取堆棧跟蹤。 – ikegami

回答

3

fatal()不是perl內置的,但是它是調用不可克服(「致命」)錯誤的子例程的常用名稱。顯然,腳本中的某些內容正在調用此函數,但它不存在。

您在腳本中使用了哪些模塊?作者可能是故意這樣做的,所以你可以定義一個致命的()並捕獲錯誤。如果你不能揣摩出它的發生,你可以添加這wrapper.pl:

use YAML::XS; 

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

這將使你在哪裏子由(Dump caller 1)呼籲一些細節,什麼是在參數堆棧。