在Morbo(和Hypnotoad)服务器下运行的程序中,exit()
的调用被静默忽略,并且有效地作为回调的返回。 END块通常会触发,但程序本身永远不会退出。
#!/usr/bin/perl
use Modern::Perl;
use Mojolicious::Lite;
END {
say "END block";
}
Mojo::IOLoop->timer(5 => sub {
say "Sleeping...";
sleep 15;
say "Before...";
exit(1);
say "Never seen";
});
app->start;
$ morbo test.pl
Server available at http://127.0.0.1:3000
Sleeping...
Before...
END block
^C
答案 0 :(得分:1)
启动 Mojolicious应用程序时,可能会发生不良情况(无数据库连接)。我决定更改应用程序的根URL。
在Myapp.pm中:
sub startup {
my $app = shift;
$app->plugin('Config');
...
my $r = $app->routes;
$r->get('/')->to('root#index')->name('root');
eval {
$app->check_important_things_which_can_die;
};
if ($@) {
$r->find('root')->remove;
$r->get('/')->to('Error::Root#index')->name('error_root');
}
使用路由之后,我不知道这是否可以在运行的应用程序中起作用。
答案 1 :(得分:0)
您可以从处理程序中向parent process ID发出kill
:
system "kill -s INT " . getppid();
这将正常退出服务器进程,杀死已启动的所有工作进程。也适用于Hypnotoad。