【问题标题】:Impossible to start server after hard closing Eclipse (tomcat server already started)硬关闭 Eclipse 后无法启动服务器(tomcat 服务器已经启动)
【发布时间】:2019-10-27 19:48:20
【问题描述】:

我处理链接到我的 java 项目(在 Eclipse 上运行)的大型存储库,有时(当我通常进行文本搜索时)我的 Eclipse 停止工作。

如果我在那个状态下“硬关闭”它并且我启动了我的 Tomcat,问题是它不会在退出之前停止 tomcat。

当我再次启动 Eclipse 时,它​​会告诉我 Tomcat 已停止(这不是因为当我硬关闭 Eclipse 时它没有停止 tomcat),如果我再次尝试启动它,我会遇到以下错误:

我重启它的唯一方法是重启我的电脑..我承认这有点烦人..

您知道是否有办法在 Eclipse 中停止我的“幻像运行”tomcat 服务器,还是每次发生这种情况时我都必须重新启动计算机? (我的电脑没有管理员权限,无法使用任务管理器杀死进程)

非常感谢

【问题讨论】:

  • 只需打开任务管理器并从那里杀死tomcat进程。无需重启服务器
  • 您好,我的电脑没有管理员权限,无法使用任务管理器杀死进程。有没有办法从 Eclipse 中做到这一点,或者“刷新”tomcat 状态
  • 杀死端口 8005、8080、8009 [stackoverflow.com/questions/39632667/…

标签: eclipse tomcat jvm


【解决方案1】:

停止 tomcat 的标准机制是在关闭端口上发送关闭命令。通常关闭端口是8005,可以手动发送命令停止服务器:

  • 在 linux 上(仅出于完整性考虑):echo "SHUTDOWN" | nc -w 2 127.0.01 8005
  • 在窗户上:
    1. 远程登录 127.0.0.1 8005
    2. 输入SHUTDOWN

如果你无法访问这些命令,你可以用 java 编写一个简单的应用程序:

   public static void main(String[] args) throws IOException {
        final InetSocketAddress shutdownAddress = new InetSocketAddress(Inet4Address.getLoopbackAddress(), 8005);
        try (Socket socket = new Socket()) {
            socket.connect(shutdownAddress);

            try (OutputStream out = socket.getOutputStream()) {
                out.write("SHUTDOWN".getBytes(StandardCharsets.US_ASCII));
            }
        }
    }

PS:在linux上你也可以发送信号SIG_INT:kill -2 <PID>

【讨论】:

  • telnet 对我不可用,但我知道你想在这里做什么。另外,我认为它不需要管理员权限。我将以我的方式搜索以找到我可以使用的等价物(也许 netstat -ano 来获取 PID)。谢谢
  • 好吧,您也可以通过编程方式完成。只需打开一个到 127.0.0.1:8005 的 TCP 套接字并发送 SHUTDOWN。在java中不超过20行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-23
相关资源
最近更新 更多