在 Linux 中发出 kill 命令时优雅地停止嵌入式码头服务器

在我的嵌入式 Jetty 服务器应用程序中,我想在 linux 中的 kill -9 命令杀死它之前关闭一些流、执行器等。我该如何处理?


我观察到,当我的 jetty 服务器正在运行时,我发出 kill -9 命令,然后“Killed”字符串打印在日志中,应用程序关闭。


我已经添加了作为服务器连接器的LifeCyCleCleListener,以便如果我的服务器停止,我可以在应用程序关闭之前进行一些清理。但是在杀戮-9的情况下,这不会被调用


    server = new Server();

    loadConnectors(server);


    ServletContextHandler context = new ServletContextHandler(ServletContextHandler.NO_SESSIONS);

    context.setContextPath("/");


    server.setHandler(context);


    ServletHolder jerseyServlet = context.addServlet(ServletContainer.class, "/*");

    jerseyServlet.setInitOrder(0);


    // Tells the Jersey Servlet which REST service/class to load.

    jerseyServlet.setInitParameter("jersey.config.server.provider.classnames", Resources.class.getCanonicalName());


    server.setStopAtShutdown(true); 

    server.start();

    logger.debug("Reached this line");




  private void loadConnectors(Server server) {

    //----Http connection setup------------------

    ServerConnector connector = new ServerConnector(server);

    connector.setPort(9025);

    connector.addLifeCycleListener(new ConnectorListener());

            .....

    }


慕码人2483693
浏览 53回答 3
3回答

qq_笑_17

使用将始终导致 JVM 的严格终止。kill -9Jetty无能为力来解决这个问题。请考虑在 Web 服务器上使用命令(显然受密码保护),该命令只会发出 .Server.stop()或者使用 JMX 并调用服务器的方法。(这可以通过JMX控制台/ JMX浏览器/甚至JMX命令行来完成)stop()

神不在的星期二

这是不可能的,对不起。 (9) 和 (Linux 上有 19 个,Solaris 上有 23 个)不能被忽视或捕获。SIGKILLSIGSTOP

米琪卡哇伊

你只能用运行时收听(杀死-15)。KILLSIG 15Runtime.getRuntime().addShutdownHook(new Thread());
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java