2010-06-30 62 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