启动多个线程并使每个exec()然后destroy()一个正在运行的java进程导致某些进程没有被销毁并且在程序退出后仍然运行.这是一些重现问题的代码.我注意到你启动的线程越多,进程就越多.而且,在destroy()之前睡眠越多,进程就越少.(我使用InfiniteLoop作为示例.任何正在运行的进程都可以解决问题.)
编辑:已经向Oracle报告了Bug,等待答案.随意分享有关该主题的任何知识/实验.
for(int i = 0; i < 100; i++)
{
new Thread(new Runnable()
{
public void run()
{
try
{
Process p = Runtime.getRuntime().exec(new String[]{"java", "InfiniteLoop"});
Thread.sleep(1);
p.destroy();
}catch(IOException | InterruptedException e){e.printStackTrace();}
}
}).start();
}
Run Code Online (Sandbox Code Playgroud)