Как отправить сигнал SIGINT из Java во внешний процесс? - PullRequest
17 голосов
/ 20 октября 2011

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

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

Ответы [ 4 ]

15 голосов
/ 20 октября 2011

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

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

Конечно, это может привести к решению, зависящему от платформы ... Потенциально выЯ смогу использовать этот инструмент, хотя он находится в «режиме песочницы».Но это может дать вам представление:

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

См. Также этот связанный вопрос здесь:

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

3 голосов
/ 12 апреля 2012

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

2 голосов
/ 20 октября 2011

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

2 голосов
/ 20 октября 2011

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

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

...