Grails 2.3.0 Tomcat进程在Grails应用程序终止后仍然有效

Grails 2.3.0 Tomcat进程在Grails应用程序终止后仍然有效,tomcat,grails,Tomcat,Grails,我在Grails2.3.0中遇到了几个非常恼人的问题,其中最恼人的是当我杀死Grails应用程序时Tomcat拒绝死亡。无论我是从命令行还是从GGTS运行Grails应用程序,当我停止运行Grails应用程序时,Tomcat都不会死掉,因此下次尝试运行Grails应用程序时,我会收到以下警告: | Error Server failed to start for port 8080: Address already in use: JVM_Bind (Use --stacktrace to se

我在Grails2.3.0中遇到了几个非常恼人的问题,其中最恼人的是当我杀死Grails应用程序时Tomcat拒绝死亡。无论我是从命令行还是从GGTS运行Grails应用程序,当我停止运行Grails应用程序时,Tomcat都不会死掉,因此下次尝试运行Grails应用程序时,我会收到以下警告:

| Error Server failed to start for port 8080: Address already in use: JVM_Bind (Use --stacktrace to see the full trace)
我必须找到Tomcat的进程并手动终止它以释放端口


我已经安装了XAMPP,但是XAMPP附带的Tomcat安装没有运行。我重命名了XMAPP-Tomcat目录,只是为了确保。奇怪的是,当我运行Grails应用程序时,XAMPP控制面板显示Tomcat已启动(尽管停止按钮不起作用)。

XAMP附带一个Apache http服务器,而不是Tomcat,它的停止按钮不会杀死Grails应用程序。它可能显示为已启动,因为它检查
http://localhost:8080/
联机,但无法验证本地主机是否来自XAMP或其他服务器


试图用
GGTS
中的红色按钮杀死应用程序将失败。确实,这是JIRA的罚单。同时,正确的流程是运行
stop-app
命令(ctrl+alt+shift+g)。

XAMP附带一个ApacheHTTP服务器,而不是Tomcat,它的停止按钮不会杀死Grails应用程序。它可能显示为已启动,因为它检查
http://localhost:8080/
联机,但无法验证本地主机是否来自XAMP或其他服务器


试图用
GGTS
中的红色按钮杀死应用程序将失败。确实,这是JIRA的罚单。同时,正确的流程是运行
stop-app
命令(ctrl+alt+shift+g)。

我是一个不耐烦的人,当打开一个新控制台并使用
stop-app
命令时,它的工作速度不够快。我制作了这个小的批处理文件来加快速度,直到这个问题得到解决。此批处理文件将找到绑定到端口8080的进程并将其终止

@echo off
for /f "delims=" %%a in ('netstat -aon ^| find ":8080"') do @set netstatRslt=%%a
set pid=%netstatRslt:~-5%
taskkill /f /pid %pid%

我是一个不耐烦的人,当打开一个新的控制台并使用
stop-app
命令确实有效时,它的工作速度不够快。我制作了这个小的批处理文件来加快速度,直到这个问题得到解决。此批处理文件将找到绑定到端口8080的进程并将其终止

@echo off
for /f "delims=" %%a in ('netstat -aon ^| find ":8080"') do @set netstatRslt=%%a
set pid=%netstatRslt:~-5%
taskkill /f /pid %pid%

我发现您的代理设置会影响“停止应用程序”关闭tomcat的能力。运行“run app”时,grails还侦听服务器端口+1(通常为8081)。对该端口的任何请求都会导致服务器关闭。“停止应用程序”脚本只是向该端口发出请求

在我的例子中,我使用'addproxy'命令来配置我的代理,但我没有添加'--noproxy=localhost'参数。我假设当我运行stop应用程序时,它试图通过代理访问localhost:8081,但失败了,因此服务器没有关闭。一旦我将'--noproxy=localhost'添加到我的代理配置中,stop应用程序就运行良好


这还意味着,当您在grails>提示符下按Ctrl+C时,tomcat被关闭。

我发现您的代理设置会影响“停止应用程序”关闭tomcat的能力。运行“run app”时,grails还侦听服务器端口+1(通常为8081)。对该端口的任何请求都会导致服务器关闭。“停止应用程序”脚本只是向该端口发出请求

在我的例子中,我使用'addproxy'命令来配置我的代理,但我没有添加'--noproxy=localhost'参数。我假设当我运行stop应用程序时,它试图通过代理访问localhost:8081,但失败了,因此服务器没有关闭。一旦我将'--noproxy=localhost'添加到我的代理配置中,stop应用程序就运行良好


这还意味着,当您在grails>提示符下按Ctrl+C时,tomcat将关闭。

您如何停止应用程序?你试过grails停止应用程序吗?我刚刚用CTRL+C停止了你的应用程序?你试过grails stop应用程序了吗?我只是用CTRL+C组合键杀了它,太棒了,你有JIRA问题的链接吗?太棒了,你有JIRA问题的链接吗?