这件事已经困扰我有一段时间了。
在我的 JSF 开发周期中,我多次重新加载 tomcat,有时甚至需要重新启动 tomcat。我注意到,有时使用 shutdown.sh 关闭 tomcat 不起作用,因为通过 startup.sh 启动时,提示该地址已用于端口 8080。而在 linux shell 中,我必须执行如下操作:
ps auwx | grep -i tomcat
kill -9 <tomcatPid>
有没有什么方法可以彻底关闭 tomcat,就像 Windows 中的 tomcat 服务一样?
我目前正在使用 opensuse linux 11.2,但我还没有将 tomcat 添加到我的服务中。仍然从 shell 手动启动和关闭它。
答案1
您只需运行以下命令即可避免:
pkill -f catalina
优雅地终止与文本匹配的进程卡塔利娜。
并检查是否卡塔利娜进程仍在运行您可以执行以下操作:
pgrep -fl catalina
最后,使用暴力手段杀死它,尝试:
pkill -9 -f catalina
答案2
干净的关闭方法是kill <tomcatPid>
。这将启动 JVM 关闭进程,包括 servlet 上下文销毁机制。在极少数情况下,JVM 会卡在关闭进程中,您需要使用kill -9 <tomcatPid>
来终止该进程。
例如:
ps auwx | grep -i tomcat
kill <tomcatPid>
sleep 10 # This value is dependent how long it takes for your app to shut down
ps auwx | grep -i tomcat
if tomcat is still alive
kill -9 <tomcatPid>