在不更改代码的情况下中断 java 进程中挂起的线程 运行 的命令
Command to Interrupt a hung thread running in a java process without code changes
我有一个 java 进程 运行,不幸的是 进程中的一个线程挂起 。
我找到了使用 jstack 挂起的 线程 ID,但是我找不到任何关于如何使用 ID 中断此线程的参考资料?
是否可以通过使用 processId 和 ThreadId Interrupt/Stop 来自控制台(或基本上在进程之外)的线程?
关于如何解决这个问题有什么建议吗?
PS :我不想终止进程,因为它只是一个挂起的线程。另外,我也不想对 Stop/Interrupt 线程进行代码更改。我就是想干掉它,这样它的资源就可以全部释放了。
在 JVM 中没有终止线程的内置方法,至少不是有意实现的方法。
话虽如此,如果您已使用适当的参数启动 JVM,以便您可以启动远程 JMX 会话,您实际上可以挂起线程并向其中注入 RuntimeException
,这几乎肯定会终止它(除非你正在用 RuntimeException
s 做一些粗糙的事情)。
P.S。你永远不会在生产中启动你的 JVM 允许流氓 JMX 连接,如果你不在生产中,我猜上述方法对你没有太大帮助。
您应该能够向进程发送 SIGINT,这应该会被所有线程接收到。 (那就是 catch (InterruptedException ex) ...)
我有一个 java 进程 运行,不幸的是 进程中的一个线程挂起 。
我找到了使用 jstack 挂起的 线程 ID,但是我找不到任何关于如何使用 ID 中断此线程的参考资料?
是否可以通过使用 processId 和 ThreadId Interrupt/Stop 来自控制台(或基本上在进程之外)的线程?
关于如何解决这个问题有什么建议吗?
PS :我不想终止进程,因为它只是一个挂起的线程。另外,我也不想对 Stop/Interrupt 线程进行代码更改。我就是想干掉它,这样它的资源就可以全部释放了。
在 JVM 中没有终止线程的内置方法,至少不是有意实现的方法。
话虽如此,如果您已使用适当的参数启动 JVM,以便您可以启动远程 JMX 会话,您实际上可以挂起线程并向其中注入 RuntimeException
,这几乎肯定会终止它(除非你正在用 RuntimeException
s 做一些粗糙的事情)。
P.S。你永远不会在生产中启动你的 JVM 允许流氓 JMX 连接,如果你不在生产中,我猜上述方法对你没有太大帮助。
您应该能够向进程发送 SIGINT,这应该会被所有线程接收到。 (那就是 catch (InterruptedException ex) ...)