Ответ 1
Запускаете ли вы внешнюю программу как java.lang.Process
? Поскольку класс Process имеет метод destroy()
.
У меня есть приложение Java, которое создает внешний процесс и читает процесс 'stdout через InputStream. Мне нужно уметь убивать процесс, когда я покончу с этим. Есть ли способ отправить сигнал SIGINT в этот процесс? (как если бы я нажал Ctrl + C с консоли).
Внешний процесс - это не мой код, и я не могу его изменить.
Запускаете ли вы внешнюю программу как java.lang.Process
? Поскольку класс Process имеет метод destroy()
.
Можете ли вы отправить kill -SIGINT <pid>
в процесс (учитывая, что вы знаете идентификатор процесса):
Runtime.getRuntime().exec("kill -SIGINT 12345");
Конечно, это создало бы платформенно-зависимое решение... Потенциально вы сможете использовать этот инструмент, хотя он находится в режиме "песочницы". Но это может дать вам идею:
http://commons.apache.org/sandbox/runtime/
Смотрите также этот вопрос:
как я могу убить процесс Linux в java с помощью SIGKILL Process.destroy() делает SIGTERM
Для других людей, прибывающих сюда из Google, если вы хотите отправить сигнал текущему процессу (aka JVM), вы можете использовать метод sun.misc.Signal.raise(). Лично мне это нужно из-за библиотеки JNI, которую я использую.
К сожалению, нет родного способа отправки сигнала arbirtray в Java.
Я согласен с Лукасом в использовании Runtime.exec(), или вы можете использовать что-то вроде библиотека Posix для Java.