Подтвердить что ты не робот

Как отправить сигнал SIGINT из Java во внешний процесс?

У меня есть приложение Java, которое создает внешний процесс и читает процесс 'stdout через InputStream. Мне нужно уметь убивать процесс, когда я покончу с этим. Есть ли способ отправить сигнал SIGINT в этот процесс? (как если бы я нажал Ctrl + C с консоли).

Внешний процесс - это не мой код, и я не могу его изменить.

4b9b3361

Ответ 1

Запускаете ли вы внешнюю программу как java.lang.Process? Поскольку класс Process имеет метод destroy().

Ответ 2

Можете ли вы отправить kill -SIGINT <pid> в процесс (учитывая, что вы знаете идентификатор процесса):

Runtime.getRuntime().exec("kill -SIGINT 12345");

Конечно, это создало бы платформенно-зависимое решение... Потенциально вы сможете использовать этот инструмент, хотя он находится в режиме "песочницы". Но это может дать вам идею:

http://commons.apache.org/sandbox/runtime/

Смотрите также этот вопрос:

как я могу убить процесс Linux в java с помощью SIGKILL Process.destroy() делает SIGTERM

Ответ 3

Для других людей, прибывающих сюда из Google, если вы хотите отправить сигнал текущему процессу (aka JVM), вы можете использовать метод sun.misc.Signal.raise(). Лично мне это нужно из-за библиотеки JNI, которую я использую.

Ответ 4

К сожалению, нет родного способа отправки сигнала arbirtray в Java.

Я согласен с Лукасом в использовании Runtime.exec(), или вы можете использовать что-то вроде библиотека Posix для Java.