gpt4 book ai didi

java - 什么会导致 Java 在 System.exit() 之后继续运行?

转载 作者:IT老高 更新时间:2023-10-28 20:53:33 28 4
gpt4 key购买 nike

我有一个 Java 程序正在通过 ProcessBuilder 从另一个 Java 程序启动。System.exit(0) 是从子程序调用的,但是对于我们的一些用户(在 Windows 上),与子程序关联的 java.exe 进程不会终止.子程序没有关闭 Hook ,也没有可能阻止 System.exit() 终止 VM 的 SecurityManager。我自己无法在 Linux 或 Windows Vista 上重现该问题。到目前为止,该问题的唯一报告来自两名 Windows XP 用户和一名 Vista 用户,他们使用两种不同的 JRE(1.6.0_15 和 1.6.0_18),但他们每次都能重现该问题。

谁能指出 JVM 在 System.exit() 之后无法终止的原因,然后仅在某些机器上?

编辑 1: 我让用户安装 JDK,以便我们可以从有问题的 VM 中获取线程转储。用户告诉我的是,只要他单击菜单中的“退出”项,VM 进程就会从 VisualVM 中消失 --- 但是,根据 Windows 任务管理器,该进程并没有终止,无论多长时间用户等待(分钟,小时),它永远不会终止。

编辑 2: 我现在已经确认父程序中的 Process.waitFor() 永远不会为至少一个有问题的用户返回。所以,总结一下:子虚拟机似乎已经死了(VisualVM 甚至没有看到它),但父虚拟机仍然认为该进程是 Activity 的,Windows 也是如此。

最佳答案

如果您的代码(或您使用的库)有关闭钩子(Hook)或终结器无法顺利完成,则可能会发生这种情况。

一种更有效(因此只应在极端情况下使用!)强制关机的方法是运行:

Runtime.getRuntime().halt(0);

关于java - 什么会导致 Java 在 System.exit() 之后继续运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2614774/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com