为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕码人2483693 2022-09-14 15:36:06
在我的嵌入式 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());            .....    }
查看完整描述

3 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

使用将始终导致 JVM 的严格终止。kill -9

Jetty无能为力来解决这个问题。

请考虑在 Web 服务器上使用命令(显然受密码保护),该命令只会发出 .Server.stop()

或者使用 JMX 并调用服务器的方法。(这可以通过JMX控制台/ JMX浏览器/甚至JMX命令行来完成)stop()


查看完整回答
反对 回复 2022-09-14
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

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



查看完整回答
反对 回复 2022-09-14
?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

你只能用运行时收听(杀死-15)。KILLSIG 15Runtime.getRuntime().addShutdownHook(new Thread());



查看完整回答
反对 回复 2022-09-14
  • 3 回答
  • 0 关注
  • 52 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信