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!";
}

这将为您提供有关从 ( ) 调用 sub 的位置Dump caller 1以及参数堆栈中的内容的一些详细信息。

于 2012-05-03T16:58:58.083 回答