Tomcat 在 Eclipse 中未关闭

2022-09-03 02:37:31

我正在构建一个相对简单的Web应用程序,其中主servlet实现接口以确定上下文是否已启动或已停止。我已经实现了我的 、和方法(两者都调用基类)。我目前没有实现任何真正的功能,除了我已经在加载文件的方法中初始化了log4j。ServletContextListenercontextInitializedcontextDestroyedinitdestroyinitdestroysupercontextInitializedlog4j.properties

然而,当我从Eclipse中启动和停止Tomcat服务器时,一切都以正确的顺序调用(我正在使用一些's来测试这一点),但是在停止服务器大约10秒后,我会出现一个Eclipse弹出窗口,说明以下内容:System.out.println

服务器 Tomcat v6.0 服务器在本地主机没有响应。是否要终止此服务器?单击“确定”终止服务器,或单击“取消”继续等待。

这是我停止服务器时在 Eclipse 控制台中打印的内容:

04/01/2010 7:39:13 PM org.apache.catalina.core.StandardService stop
INFO: Stop service Catalina
contextDestroyed
04/01/2010 7:39:13 PM org.apache.coyote.http11.Http11Protocol destroy
INFO: Stop Coyote HTTP/1.1 on http-8080

在最后一条消息之后,它只是挂在那里,直到弹出窗口出现。如果我选择等待,按取消,Eclipse将变得不可用,我必须从终端终止Eclipse进程。INFO

如能就如何解决这一问题提供任何意见,将不胜感激。

更新:

这个问题是由我在方法中启动的非守护进程线程引起的(忘记提到:)。通过使用该方法显式停止线程解决了该问题,即使该方法似乎已被弃用。initstop


答案 1

此线程中所述,这应该与清理问题有关。

如果 Web 应用程序没有完全清理,尤其是在停止它启动的非守护进程线程方面,Tomcat 将无法关闭。
单击“停止”具有提供超时的优点。
如果Tomcat未能在超时内停止,将出现一个对话框,为您提供终止服务器或继续等待的选项。


答案 2

在窗口中打开命令提示符或 PowerShell 并键入

netstat -nao

从结果和类型中查找相应端口的pid

taskkill /f /pid [port number] 

推荐