포크 때 호출되지이 내 코드 않았다 불평 :POE는 POE :: 커널의 실행 방법은 내가
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 :: 커널의 run() 메소드가 호출되지 것을 불평 ,하지만 위의 코드에서 볼 수 있듯이, 나는 이미 그것을했다. 스크립트는 데몬 모드에서 완벽하게 작동하지만 나는 그 경고를 없애거나 그것이 왜 그렇게 말하고 있는지 이해할 수 없습니다. 나 또한 $ poe_kernel-> has_forked()를 호출 해 보았는데 그 차이도 없었다.
나는 생각이 없습니다. 어떤 제안?
에 추가 : 어쩌면 충분히 명확하지 않을 수 있습니다. 아래의 코드는 세션을 생성하고 커널을 실행합니다.
_create_sessions($self, $settings);
$poe_kernel->run;
완벽하게 정상적으로 작동합니다. 포크 자식 내에서 동일한 코드가 실행될 때만 스크립트를 백그라운드로 보낼 수 있습니다. POE :: Kernel의 run 메소드가 호출되지 않았다고합니다. 스크립트는 백그라운드로 들어가서 커널이 실제로 실행 중임을 의미하는 것처럼 작동합니다. 그 성가신 경고를 없애기 위해서만보고 있습니다.
이 문제가 해결되었습니다. 나는 POE :: Component :: Resolver가 임포트시에 스스로를 설정한다고 생각한다. 포크라면 POE가 불평 할 것이고 자식 프로세스가 제대로 작동하지 않을 것이다. 자식 프로세스에서 $ poe_kernel->을 실행하면 리졸버가 종료되고 포크가 올바르게 작동합니다. – rjh