java - 从另一个 Java 应用程序停止/启动/重新启动 Java 应用程序

标签 java linux centos pid

我的 linux(centos) 系统上运行着两个 Java 应用程序。第一个应用程序完成了处理,第二个应用程序CONTROLS 第一个应用程序。

控制含义(对第2个应用发起的第1个应用进行操作):

  • 开始
  • 停止
  • 重新启动

我的第一个应用程序在静态端口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 | grep eSocketServer.jar | awk '{print $2}'

最佳答案

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

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

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

关于java - 从另一个 Java 应用程序停止/启动/重新启动 Java 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18591588/

相关文章:

java - Hibernate - 如何提供对整数类型的正确映射?

java - 当hystrix超时时,如何打印所花费的时间?

linux - 基于匹配属性构建列表(ansible)

c - 与 '%rbx' 后缀一起使用的寄存器 0x​​104567910 不正确

centos - 使用 puppet 将 exclude 添加到现有的 yum repo 配置

bash - 成功的 yum 更新是否有任何原因导致后续 wget 失败?

java - 正则表达式 - 仅当前一部分匹配时才匹配此部分

java - GreeterEJB 和 GreeterLibrary 之间的依赖关系的本质是什么?

linux - 查找 zip 文件、打印路径和 zip 内容

Php 套接字、Apache 和 CentOS 6.3 给出权限被拒绝