如何退出在Morbo或Hypnotoad服务器下运行的程序

时间:2017-12-11 15:40:50

标签: perl mojolicious-lite hypnotoad morbo

在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 

2 个答案:

答案 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。