【问题标题】:Start another java program inside a java program and kill the mother process在一个java程序中启动另一个java程序并杀死母进程
【发布时间】:2018-04-06 06:05:53
【问题描述】:

我在我的 java 文件中使用终端命令“java -jar secondApp.jar”来启动 secondApp.jar。
即使第一个应用程序被杀死,我也需要运行 secondApp.jar。
此方案在 Windows 环境中完美运行。但是当我在 linux 环境(Ubuntu 16.04)中测试它时,似乎杀死第一个进程会杀死两个进程。
这是我用来启动第二个应用程序的代码。

String command = "java -jar secondApp.jar"
Process process = Runtime.getRuntime().exec(command);

我做错了什么?

【问题讨论】:

  • “即使第一个应用程序被杀死”。如果您终止运行它的JVM,这是“杀死”进程的方式,第二个也将被终止,因为它在同一个JVM中运行
  • "java -jar secondApp.jar &" for linux 怎么样?
  • @Stultuske 我不会终止 JVM。我只是杀死了第一个应用程序的 pid
  • @Arvind 不工作

标签: java ubuntu


【解决方案1】:

使用所需的 java 命令准备一个批处理文件和一个 linux 脚本文件,然后试试这个:

    if (SystemUtils.IS_OS_WINDOWS) {
        // run batch file
        String batchFullPath = new File("C:\\myBatchFile.bat").getAbsolutePath();
        Runtime.getRuntime().exec("cmd /C start " + batchFullPath);
    } else if (SystemUtils.IS_OS_LINUX) {
        // run linux script
        String scriptFullPath = new File("~/myScriptFile.sh").getAbsolutePath();
        File workingDir = new File("~");
        Runtime.getRuntime().exec("/usr/bin/xterm " + scriptFullPath, null, workingDir);
    } else {
        throw new RuntimeException("Unsupported Operating System");
    }

(使用 xterm,因为假设每台 Linux 机器都安装了它是相当安全的)

【讨论】:

    猜你喜欢
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 1970-01-01
    • 2015-03-22
    • 2013-11-12
    • 1970-01-01
    相关资源
    最近更新 更多