2012-02-13 72 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远程调用的函数。您还可以设置用户和密码进行访问。

相关问题