用于在没有代码更改的情况下中断在java进程中运行的挂起线程的命令

时间:2016-05-02 10:38:20

标签: java multithreading kill

我正在运行一个java进程,不幸的是进程中的一个线程被挂起

我找到了使用jstack挂起的线程ID ,但是我无法找到关于如何使用id中断此线程的任何引用?

是否可以使用processId和ThreadId 从控制台中断/停止线程(或基本上在进程外)?

有关如何解决此问题的任何建议?

PS:我不想杀死这个进程,因为它只挂了一个线程。此外,我也不想将代码更改为停止/中断线程。我只想杀死它,所以它的所有资源都可以释放。

2 个答案:

答案 0 :(得分:2)

在JVM中杀死一个线程是没有的,但至少不是故意实现的。

话虽如此,如果您已使用适当的参数启动JVM,以便可以启动它的远程JMX会话,您实际上可以暂停该线程并向其中注入RuntimeException,这几乎是肯定会终止它(除非你正在做一些与RuntimeException s一样的事情)。

P.S。你永远不会在生产中启动你的JVM,允许流氓JMX连接,如果你没有投入生产,我猜你认为上述方法对你没什么帮助。

答案 1 :(得分:-1)

您应该能够向进程发送SIGINT,这应该由所有线程接收。 (这是catch(InterruptedException ex)...)