2012-02-13 70 views
5

如果是這樣,我怎樣才能找出它是哪一個進程(在系統上的其他進程中),以及如何殺死它以使其shutdownhook得到執行?是否有可能在一個jvm中的java進程殺死/阻止另一個jvm中的另一個java進程?

我想這樣做的原因是因爲我想實現類似於apache start,apache stop這樣的調用apache start或apache stop之後,服務器進程在後臺啓動或停止,並且我得到命令或bash提示符;這是假設可以在Linux和Windows上工作。

回答

2

你可以考慮在服務端打開服務,這個服務本身就是由主應用程序處理的。

另一方面,如果你不想這樣做,你需要找到一種方法來獲得一個jvm實例的進程。如果你只想殺死jvm,那很容易,但是對於一個特定的過程。 ü需要一些幫助,我認爲,像這樣:

link

希望工程爲ü

+0

我想過套接字的事情,但決定不這麼做,因爲服務器將另一個套接字暴露給世界,任何人都可以向其發送虛假消息(甚至啓用SSL),除非當然套接字僅偵聽來自本地主機而不通過網絡的連接,這是可能的嗎? – shawn 2012-02-13 07:13:36

+0

當然這是可能的。 U可以定義您的主應用程序對您的防火牆的權限,並防止您的系統受到攻擊。而且,將責任關閉到應用程序本身的想法,我認爲是一件好事。 – Neron 2012-02-13 07:21:31

4

這是可能的,但是這將是特定於操作系統。 JVM中沒有任何東西會自動爲您提供殺死其他虛擬機的權限。

您需要調用操作系統的kill命令(或等效命令)或編寫一些本機代碼。

這是可以完成的,如果你只打算在類Unix系統上運行,那麼你最好的選擇是編寫一個你想要的shell腳本,然後用ProcessBuilder和朋友來執行它。

0

我想你可以使用JMX。

您可以在您的java進程中啓動一個JMX服務器,並打開一些API,如啓動和停止。

使用JMX,您無需實現任何有關套接字和權限的內容。你只需要提供一個JMX遠程調用的函數。您還可以設置用戶和密碼進行訪問。

相關問題