这是我的代码:
if ($DAEMON) {
my $pid = fork();
if (not defined $pid) {
print "Unable to start daemon.\n";
exit(1);
}
elsif ($pid == 0) {
open STDOUT, '>', '/dev/null';
open STDERR, '>', '/dev/null';
_create_sessions($self, $settings);
$poe_kernel->run;
}
else { print "Script forked to background with PID $pid\n"; }
}
else {
_create_sessions($self, $settings);
$poe_kernel->run;
}
当 $DAEMON = 1 时,它抱怨 POE::Kernel 的 run() 方法从未被调用,但正如您在上面的代码中看到的那样,我已经这样做了。该脚本在守护程序模式下工作得非常好,但我无法摆脱该警告或理解它为什么这么说。我还尝试调用 $poe_kernel->has_forked() ,但这也没有什么不同。
我没主意了。有什么建议么?
更新添加:也许我不够清楚。下面的代码创建会话并运行内核。
_create_sessions($self, $settings);
$poe_kernel->run;
它工作得很好。只有当相同的代码在一个分叉的孩子中运行时,我才能将脚本发送到后台,它说 POE::Kernel 的运行方法没有被调用。该脚本确实进入了后台并像它应该的那样工作,这意味着内核确实正在运行。我只是想摆脱那个烦人的警告。