Я ищу инструмент / пакет / библиотеку Java, которые позволят мне принудительно убить дочерний процесс.
Этот инструмент / пакет / библиотека должны работать на платформе Windows (обязательно). Требуется поддержка Linux / Unix.
Мой код Java создает дочерний процесс, который просто не реагирует на стандартный способ Java для уничтожения дочернего процесса: process.destroy () и, поскольку у меня нет исходного кода ребенка, я не могу запрограммировать его на лучше обрабатывать запросы на завершение.
Я попытался закрыть поток ввода и вывода ошибок дочернего процесса перед вызовом destroy () и без всякого эффекта.
Я даже пробовал передавать сигнал ctrlBreak (char = 3) прямо в child.getOutputStream (), и снова получили те же результаты.
Решение, которое мне наконец удалось найти, заключалось в следующем:
Получить PID дочернего элемента при его создании
Это можно сделать в Windows, изменив списки процессов.
до и после создания дочернего элемента ( getRuntime (). exec ("tasklist / v")
)
Используйте PID дочернего элемента для выполнения системной команды принудительного уничтожения
в Windows: getRuntime (). exec ("taskkill / pid" + childPid + "/ f")
Но - это сложный код, который я не хочу отлаживать и поддерживать, плюс проблема сам, я не сомневаюсь, ранее встречался многими другими разработчиками Java, что приводит меня к надежде, что такой инструмент / пакет / библиотека Java уже существует.
Я просто не знаю его имени ...
PS: Мой дочерний процесс был создан Runtime.getRuntime ( ) .exec (cmd)
, но
Я получаю такое же поведение при использовании ProcessBuilder.