【问题标题】:Sending a POSIX signal from the JVM从 JVM 发送 POSIX 信号
【发布时间】:2011-03-10 00:50:13
【问题描述】:

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

在我尝试谷歌搜索之前,我从没想过这会是一个问题——有很多关于处理信号的信息,但没有关于发送它们的信息。

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

【问题讨论】:

标签: java clojure jvm jvm-languages


【解决方案1】:

POSIX 信号是操作系统特定的功能,但 JVM 试图成为独立于操作系统的 VM。所以没有标准的功能。

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

【讨论】:

  • +1 Posix for Java 看起来是最干净的选择(如果您可以部署 JNI 库)。否则,执行kill 似乎可以接受。
  • Hmmm ...查看了Posix for Java 文档,如果使用不慎,其中一些类可能会破坏您的JVM。
【解决方案2】:

好的。回答自己:我查看了建议的库,但我对引入大量代码的新依赖关系持谨慎态度,尤其是如果我只使用其中的一小部分。

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

(jna-invoke Integer kill pid signo)

当然是在做了 (:use net.n01se.clojure-jna) 之后。

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

【讨论】:

    猜你喜欢
    • 2011-06-28
    • 2022-12-09
    • 2018-05-14
    • 1970-01-01
    • 2012-02-18
    • 2011-02-04
    • 2013-04-09
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多