【问题标题】:stop/start/restart java application from another java application从另一个 Java 应用程序停止/启动/重新启动 Java 应用程序
【发布时间】:2013-09-03 11:49:18
【问题描述】:

我的linux(centos) system.first 应用程序完成了处理和第二个应用程序 CONTROLS 第一个应用程序。

控制含义(对从 2nd app 发起的 1st application 执行操作):

  • 开始
  • 停止
  • 重新开始

我的第一个应用程序在静态端口 10001 上运行

如何从我的第二个应用程序执行这些操作?我发现这篇文章让我更加接近。

https://stackoverflow.com/a/14340719/1169180 & https://stackoverflow.com/a/138098/1169180

如何获取在端口 (10001) 上运行的应用程序的 PID

代码:- eSocketServer.jar 是我的第一个应用程序 jar 文件

Process p = Runtime.getRuntime().exec(
                    "ps -ef | grep eSocketServer.jar | awk '{print $2}'");
BufferedReader br = new BufferedReader(new InputStreamReader(
                    p.getInputStream()));
while ((br.readLine()) != null)
System.out.println("line: " + br.readLine());
p.waitFor();
System.out.println("exit: " + p.exitValue());
p.destroy();

当shell提示符ps -ef | grep eSocketServer.jar | awk '{print $2}'执行相同的命令时,它没有给我任何输出

【问题讨论】:

  • 为什么要投反对票?任何cmets?

标签: java linux centos pid


【解决方案1】:

您可以创建程序的runnable jar 并使用以下命令从控制器启动它: Runtime.getRuntime().exec("java -jar JAR-PATHNAME");

在您的第一个应用程序中,只需使用以下语句获取process id,它将返回PIDManagementFactory.getRuntimeMXBean().getName().substring(0, ManagementFactory.getRuntimeMXBean().getName().indexOf("@")

将此PID 写入文件并让controller 从文件中读取它。 STOP 现在可以在 linux 中使用 kill 命令实现(运行方式与运行 java -jar 命令相同。

【讨论】:

  • 对于start & restart ? 是否同样有效,我可以以更合法的方式停止我的第一个应用程序吗?即System.exit(0) 而不是kill
  • 根据您的具体实施要求,方法可能会发生变化。我建议的一种方法只是众多方法中的一种。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-25
  • 1970-01-01
  • 1970-01-01
  • 2016-08-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多