How to close rmiregistry running on particular port?
我正在研究 Java RMI。我在端口 2028 上运行我的 rmiregistry 几乎没有问题,因为我已经使用它来运行我的测试程序。我可以使用其他端口运行我的程序,但我想知道,我们如何关闭在特定端口上运行的 rmiregistry?
- 您是以编程方式还是手动启动 rmiregistry 作为一个单独的进程?
-
不,我正在启动它 Linux shell,如下所示 % rmiregistry 2028
-
如果你想在编程中这样做,我们可以这样做:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| // create the registry
Registry rmiRegistry = LocateRegistry. createRegistry(port );
...
// connect to it
JMXConnectorServer connector =
JMXConnectorServerFactory. newJMXConnectorServer(url,
new HashMap <String, Object >(),
ManagementFactory. getPlatformMBeanServer());
// do stuff with it ...
// close the connection
if (connector != null) {
connector. stop();
}
// deregister the registry
if (rmiRegistry != null) {
UnicastRemoteObject. unexportObject(rmiRegistry, true);
} |
这是我们的 JMXServer 类的完整代码。我们在创建其中 2 个并完全注销它们时遇到了问题,因此我们确保在不同的端口上运行我们的单元测试。
我在我的 SimpleJmx JMX 客户端/服务包中使用此代码。
434511
如果您从 shell 运行 rmiregistry,请尝试使用以下命令关闭它:
1 2
| Process p =
Runtime. getRuntime(). exec("ps -ef | grep rmiregistry | awk '{ print $2 }' | kill -9"); |
我对 shell 命令不太熟悉,但我希望你能明白。
434511
经过这么多的麻烦,我突然意识到 rmiregistry 在 shell 的后台运行。所以我们要做的就是关闭它,首先将它带到前台,然后关闭它。它奏效了。
顺便说一句,只需输入:
然后关闭它,输入:
Ctrl c
就是这样。非常感谢所有试图帮助我的人。
434511
如果 rmi 注册中心已经在使用该端口,并且您想重新绑定服务而不使用另一个端口。你可以试试下面的代码
-
如果你想在编程中这样做,我们可以这样做:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| // create the registry
Registry rmiRegistry = LocateRegistry. createRegistry(port );
...
// connect to it
JMXConnectorServer connector =
JMXConnectorServerFactory. newJMXConnectorServer(url,
new HashMap <String, Object >(),
ManagementFactory. getPlatformMBeanServer());
// do stuff with it ...
// close the connection
if (connector != null) {
connector. stop();
}
// deregister the registry
if (rmiRegistry != null) {
UnicastRemoteObject. unexportObject(rmiRegistry, true);
} |
这是我们的 JMXServer 类的完整代码。我们在创建其中 2 个并完全注销它们时遇到了问题,因此我们确保在不同的端口上运行我们的单元测试。
我在我的 SimpleJmx JMX 客户端/服务包中使用此代码。
434511
如果您从 shell 运行 rmiregistry,请尝试使用以下命令关闭它:
1 2
| Process p =
Runtime. getRuntime(). exec("ps -ef | grep rmiregistry | awk '{ print $2 }' | kill -9"); |
我对 shell 命令不太熟悉,但我希望你能明白。
434511
经过这么多的麻烦,我突然意识到 rmiregistry 在 shell 的后台运行。所以我们要做的就是关闭它,首先将它带到前台,然后关闭它。它奏效了。
顺便说一句,只需输入:
然后关闭它,输入:
Ctrl c
就是这样。非常感谢所有试图帮助我的人。
434511
如果 rmi 注册中心已经在使用该端口,并且您想重新绑定服务而不使用另一个端口。你可以试试下面的代码
如果你想在编程中这样做,我们可以这样做:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| // create the registry
Registry rmiRegistry = LocateRegistry. createRegistry(port );
...
// connect to it
JMXConnectorServer connector =
JMXConnectorServerFactory. newJMXConnectorServer(url,
new HashMap <String, Object >(),
ManagementFactory. getPlatformMBeanServer());
// do stuff with it ...
// close the connection
if (connector != null) {
connector. stop();
}
// deregister the registry
if (rmiRegistry != null) {
UnicastRemoteObject. unexportObject(rmiRegistry, true);
} |
这是我们的 JMXServer 类的完整代码。我们在创建其中 2 个并完全注销它们时遇到了问题,因此我们确保在不同的端口上运行我们的单元测试。
我在我的 SimpleJmx JMX 客户端/服务包中使用此代码。
- 我正在从 shell 启动 rmiregistry。不通过程序使用它。
-
我在 Eclipse 中遇到了类似的问题,注册表线程将继续使用上面的代码片段永远运行。在末尾添加了 System.exit(0) ,这会杀死 JVM 中的所有线程,并且一切都很好;-)
-
1 我正在停止连接器,但不知道如何摆脱注册表的服务器套接字。谢谢你的回答。
经过这么多的麻烦,我突然意识到 rmiregistry 在 shell 的后台运行。所以我们要做的就是关闭它,首先将它带到前台,然后关闭它。它奏效了。
顺便说一句,只需输入:
然后关闭它,输入:
Ctrl c
就是这样。非常感谢所有试图帮助我的人。
如果 rmi 注册中心已经在使用该端口,并且您想重新绑定服务而不使用另一个端口。你可以试试下面的代码
如果您从 shell 运行 rmiregistry,请尝试使用以下命令关闭它:
1 2
| Process p =
Runtime. getRuntime(). exec("ps -ef | grep rmiregistry | awk '{ print $2 }' | kill -9"); |
我对 shell 命令不太熟悉,但我希望你能明白。
-
我想从 shell 我将不得不使用 ps -ef | grep 注册表。我还没有尝试过。但我一定会让你知道的。谢谢。
-
@Tudor:对不起,没有成功……但我确实找到了这样做的答案。