Запуск нескольких потоков и с каждым exec(), затем destroy() выполняемый java-процесс приводит к тому, что часть процесса не будет уничтожена и все еще запущена после выхода программы. Вот какой код, который воспроизводит проблему. Я заметил, что чем больше потоков вы начинаете, тем больше процессов остается в живых. И чем больше сна перед разрушением(), тем меньше процессов остается в живых. (Я использовал InfiniteLoop в качестве примера. Любой запущенный процесс будет делать трюк.)
EDIT: Сообщается об ошибке в Oracle, ожидая ответа. Не стесняйтесь делиться любыми знаниями/экспериментами по этому вопросу.
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();
}