2010-06-30 3 views
16

Как отправить сигнал POSIX из JVM? (на Java или Clojure)Отправка сигнала POSIX из JVM

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

За исключением использования JNI или вызова оболочки для выполнения «kill», есть ли другой способ отправки сигнала на PID?

+0

см. Также http://stackoverflow.com/questions/7835212/how-to-send-sigint-signal-from-java-to-an-external-process –

+0

В частности, этот комментарий: http: // stackoverflow. com/a/10115987/18187 – ddimitrov

ответ

9

Ok. Отвечая на вопрос: я посмотрел на предлагаемые библиотеки, но я опасаюсь вводить новые зависимости от большого количества кода, особенно если я буду использовать лишь небольшую часть.

Оказалось, что самый простой способ - использовать JNA и интерфейс с API системы (libc). В Clojure это в значительной степени составляет:

(ЮНА-вызова Integer убить Pid Signo)

после выполнения (: использование net.n01se.clojure-джна) конечно.

Поскольку это программное обеспечение не предназначено для работы в Windows, я в порядке с этим решением, которое должно работать на всех системах POSIX (для меня это интересует MacOS и Linux).

5

Сигналы POSIX - это функции, специфичные для ОС, но JVM пытается быть независимой от ОС виртуальной машиной. Таким образом, для этого нет стандартных функций.

Но вы можете выполнять команды оболочки (используя Runtime класс) или использовать некоторые lbrary для ваших нужд, подобно Posix for Java

+0

+1 Posix для Java выглядит как самый чистый вариант (если вы можете развернуть библиотеки JNI). В противном случае, exec'ing 'kill' представляется приемлемым. – sleske

+0

Хммм ... посмотрел документы 'Posix для Java', и некоторые из этих классов могут дестабилизировать вашу JVM, если использовать ее небрежно. –

 Смежные вопросы

  • Нет связанных вопросов^_^