Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在perl中,我的fork进程以“结束”&引用;未定义的子程序&;main::fatal在wrapper.pl“处调用;_Perl_Fork - Fatal编程技术网

在perl中,我的fork进程以“结束”&引用;未定义的子程序&;main::fatal在wrapper.pl“处调用;

在perl中,我的fork进程以“结束”&引用;未定义的子程序&;main::fatal在wrapper.pl“处调用;,perl,fork,Perl,Fork,在我的主程序中,我使用以下方法为孩子分叉: 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 wo

在我的主程序中,我使用以下方法为孩子分叉:

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();
}
$test_run=time();
而($test_run<$hours_run){
do$node_grp_submit;#------------------->脚本做了一些工作
睡眠30分钟;
$test_run=time();
}
如果我运行4个小时,脚本工作正常

但是如果我运行更长的时间(比如说5-8小时),我的包装器脚本就会终止
Undefined subroutine&main::fatal在wrapper.pl调用

fatal()
不是perl内置的,但它是为不可克服(“致命”)错误调用的子例程的常用名称。显然,脚本中有东西正在调用此函数,但它不存在

您在脚本中使用了哪些模块?作者可能是故意这样做的,这样您就可以定义fatal()并捕获错误。如果您不知道发生在哪里,可以将此添加到wrapper.pl:

use YAML::XS;

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

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

还可以尝试
perl-MCarp::Always script.pl
来获取堆栈跟踪。