从JVM发送POSIX信号

17

我该如何从JVM(使用Java或Clojure)发送一个POSIX信号?

我以前从未想过这会成为一个问题,直到我开始搜索它——有很多关于如何处理信号的信息,但却没有关于如何发送信号的内容。

除了使用JNI或调用shell执行“kill”之外,还有其他方法可以向PID发送信号吗?


请参考以下链接:https://dev59.com/4Gsz5IYBdhLWcg3wiISe - Andre Holzner
特别是这条评论:https://dev59.com/4Gsz5IYBdhLWcg3wiISe#10115987 - ddimitrov
2个回答

10

好的。 我自己回答:我看了建议的库,但是我担心引入大量代码的新依赖项,特别是如果我只使用其中的一小部分。

事实证明,最简单的方法是使用JNA并与系统(libc)API进行接口交互。 在clojure中,这几乎相当于:

(jna-invoke Integer kill pid signo)

当然,在执行(:use net.n01se.clojure-jna)后。

由于此软件不打算在Windows上运行,我对这个解决方案非常满意,它应该适用于所有POSIX系统(我感兴趣的是MacOS和Linux)。


5

POSIX信号是特定于操作系统的功能,但JVM试图成为独立于操作系统的虚拟机。因此,没有标准的函数可供使用。

但是您可以执行shell命令(使用 Runtime 类)或使用某些库来满足您的需求,例如Posix for Java


+1 对于 Java 来说,Posix 似乎是最干净的选择(如果您可以部署 JNI 库)。否则,exec'ing kill 也是可接受的。 - sleske
嗯...看了一下Java的Posix文档,其中一些类如果使用不当可能会破坏您的JVM。 - Stephen C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接