Инструмент / метод Java для принудительного уничтожения дочернего процесса

Я ищу инструмент / пакет / библиотеку Java, которые позволят мне принудительно убить дочерний процесс.

Этот инструмент / пакет / библиотека должны работать на платформе Windows (обязательно). Требуется поддержка Linux / Unix.

Моя проблема

Мой код Java создает дочерний процесс, который просто не реагирует на стандартный способ Java для уничтожения дочернего процесса: process.destroy () и, поскольку у меня нет исходного кода ребенка, я не могу запрограммировать его на лучше обрабатывать запросы на завершение.

Я попытался закрыть поток ввода и вывода ошибок дочернего процесса перед вызовом destroy () и без всякого эффекта.

Я даже пробовал передавать сигнал ctrlBreak (char = 3) прямо в child.getOutputStream (), и снова получили те же результаты.

Решение, которое мне наконец удалось найти, заключалось в следующем:

  1. Получить PID дочернего элемента при его создании Это можно сделать в Windows, изменив списки процессов. до и после создания дочернего элемента ( getRuntime (). exec ("tasklist / v") )

  2. Используйте PID дочернего элемента для выполнения системной команды принудительного уничтожения
    в Windows: getRuntime (). exec ("taskkill / pid" + childPid + "/ f")

Но - это сложный код, который я не хочу отлаживать и поддерживать, плюс проблема сам, я не сомневаюсь, ранее встречался многими другими разработчиками Java, что приводит меня к надежде, что такой инструмент / пакет / библиотека Java уже существует.

Я просто не знаю его имени ...

PS: Мой дочерний процесс был создан Runtime.getRuntime ( ) .exec (cmd) , но Я получаю такое же поведение при использовании ProcessBuilder.

14
задан tubaguy50035 5 July 2012 в 21:38
поделиться