【发布时间】:2011-03-10 00:50:13
【问题描述】:
如何从 JVM 中发送 POSIX 信号? (在 Java 或 Clojure 中)
在我尝试谷歌搜索之前,我从没想过这会是一个问题——有很多关于处理信号的信息,但没有关于发送它们的信息。
除了使用JNI或调用shell执行“kill”之外,还有其他方法可以向PID发送信号吗?
【问题讨论】:
标签: java clojure jvm jvm-languages
如何从 JVM 中发送 POSIX 信号? (在 Java 或 Clojure 中)
在我尝试谷歌搜索之前,我从没想过这会是一个问题——有很多关于处理信号的信息,但没有关于发送它们的信息。
除了使用JNI或调用shell执行“kill”之外,还有其他方法可以向PID发送信号吗?
【问题讨论】:
标签: java clojure jvm jvm-languages
POSIX 信号是操作系统特定的功能,但 JVM 试图成为独立于操作系统的 VM。所以没有标准的功能。
但是您可以执行 shell 命令(使用 Runtime 类)或使用一些库来满足您的需要,例如 Posix for Java
【讨论】:
kill 似乎可以接受。
Posix for Java 文档,如果使用不慎,其中一些类可能会破坏您的JVM。
好的。回答自己:我查看了建议的库,但我对引入大量代码的新依赖关系持谨慎态度,尤其是如果我只使用其中的一小部分。
事实证明,最简单的方法是使用 JNA 并与系统 (libc) API 交互。在 clojure 中,这几乎相当于:
(jna-invoke Integer kill pid signo)
当然是在做了 (:use net.n01se.clojure-jna) 之后。
由于这个软件不打算在 Windows 上运行,我对这个解决方案很好,它应该适用于所有 POSIX 系统(MacOS 和 Linux 是我感兴趣的)。
【讨论】: