命令在不更改代码的情况下中断java进程中运行的挂起线程
我有一个java进程正在运行,不幸的是,进程中有一个线程挂起了 我找到了使用挂起的线程id,但是我找不到关于如何使用id中断此线程的任何参考 是否可以使用processId和ThreadId从控制台中断/停止线程(或者基本上在进程之外) 有没有关于如何解决这个问题的建议命令在不更改代码的情况下中断java进程中运行的挂起线程,java,multithreading,kill,Java,Multithreading,Kill,我有一个java进程正在运行,不幸的是,进程中有一个线程挂起了 我找到了使用挂起的线程id,但是我找不到关于如何使用id中断此线程的任何参考 是否可以使用processId和ThreadId从控制台中断/停止线程(或者基本上在进程之外) 有没有关于如何解决这个问题的建议 PS:我不想终止进程,因为它只有一个挂起的线程。另外,我也不想更改代码来停止/中断线程。我只想杀死它,这样就可以释放它的所有资源。在JVM中没有任何方法可以杀死线程,至少不是故意实现的线程 话虽如此,如果您已经用适当的参数启动了
PS:我不想终止进程,因为它只有一个挂起的线程。另外,我也不想更改代码来停止/中断线程。我只想杀死它,这样就可以释放它的所有资源。在JVM中没有任何方法可以杀死线程,至少不是故意实现的线程 话虽如此,如果您已经用适当的参数启动了JVM,以便可以启动到它的远程JMX会话,那么您实际上可以挂起该线程并向其中注入
RuntimeException
,这几乎肯定会终止它(除非您正在对其中的RuntimeException
s执行异常操作)
- 看
另外,您永远不会在生产环境中启动JVM,允许恶意JMX连接,如果您不在生产环境中,我猜上述方法对您没有多大帮助。您应该能够向进程发送SIGINT,所有线程都应该会收到。(这就是catch(InterruptedException ex)…)据我所知,进程内运行的线程是应用程序的一部分。除非你有代码来处理/中断这样的线程,否则恐怕你只能终止进程。不,它不是
InterruptedException
。嗯,是的。我也遇到过这个解决方案,但我没有启用JMX连接,而且由于一些限制,我无法打开它。是否有一种方法可以使JMX连接只在特定的框中发生,而拒绝任何其他框中的连接?