首页 > 解决方案 > Runtime.getRuntime().exec(command) 创建的进程在执行过程中处于休眠状态

问题描述

File jarFile = new File(jarLocation + "/myJar.jar");
if ((jarFile).exists()) {
    String[] command = new String[10];
    command[0] = "java";
    command[1] = "-jar";
    command[2] = jarFile + "";
    command[3] = Data.getParam1() + "";
    command[4] = Data.getParam2() + "";
    command[5] = Data.getParam3();
    command[6] = Data.getParam4() + "";
    command[7] = Data.getParam5() + "";
    command[8] = "2";
    command[9] = Data.getParam6() + "";
    Process p1 = Runtime.getRuntime().exec(command);
}

当我在终端上执行我的 jar 时,它工作正常。但是,当我尝试使用上面的代码执行同一个 jar 时,执行此 jar 的进程进入睡眠状态而没有完成其执行。因此,请建议我如何一次性完成 jar 的执行。

标签: java

解决方案


在 java 中,创建的子进程使用父进程的控制台。阻塞可能是因为未能读取输入流或写入输出。也许当直接从终端运行 jar 时,它的工作原理是控制台可能已分配给进程(尽管不要引用我的话)。

检查:https ://docs.oracle.com/javase/7/docs/api/java/lang/Process.html


推荐阅读