Я ищу инструмент/пакет/библиотеку 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.