2010-06-30 64 views
16

如何从JVM内发送POSIX信号? (在Java或Clojure)从JVM发送POSIX信号

我从来没有想过这会是一个问题,直到我试着用谷歌搜索它 - 有很多信息处理信号,但没有关于发送它们。

使用JNI或调用shell执行“kill”的缺点,有没有其他方式发送信号给PID?

+0

另请参阅http://stackoverflow.com/questions/7835212/how-to-send-sigint-signal-from-java-to-an-external-process – 2012-04-02 15:58:30

+0

特别是此评论:http:// stackoverflow。 com/a/10115987/18187 – ddimitrov 2012-08-31 03:57:48

回答

9

确定。回答我自己:我查看了建议的库,但是我很担心在很多代码中引入新的依赖关系,特别是如果我只使用它的一小部分。

事实证明,最简单的方法是使用JNA并与系统(libc)API接口。 Clojure中的这个几乎达:

(JNA-调用整数杀PID SIGNO)

做后(:使用net.n01se.clojure-JNA)课程。因为这个软件并不打算在Windows上运行,所以我很满意这个解决方案应该适用于所有的POSIX系统(MacOS和Linux是我感兴趣的)。

5

POSIX信号是特定于操作系统的功能,但JVM被尝试成为与操作系统无关的虚拟机。所以没有标准的功能。

但你可以(使用Runtime类)执行shell命令或使用一些lbrary您的需求,喜欢的Posix for Java

+0

+1 Posix for Java看起来像最简洁的选项(如果您可以部署JNI库)。否则,执行'杀死'似乎是可以接受的。 – sleske 2010-06-30 10:09:56

+0

嗯...看着'Posix for Java'文档,其中一些类有可能会在你的JVM被不小心使用时破坏稳定。 – 2010-06-30 10:30:05