在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
来获取堆栈跟踪。