【发布时间】:2018-07-23 18:48:42
【问题描述】:
我正在尝试从 Java 运行一个命令,该命令将启动一个运行几分钟的进程。我只需要触发命令并获取进程句柄并在循环中继续执行其他操作。每隔一段时间,我将不得不监视该过程是否仍然处于活动状态。
我还需要显示控制台窗口以向用户显示进程的输出。
目前,我尝试了 Runtime 和 ProcessBuilder 类中的方法来运行我的命令,但它们都没有帮助我实现目标。
示例代码:
//Changing the directory and running Maven exec: java command on the POM file in that directory.
String cmd = "cd C:/Test & mvn exec:java";
String finalCmd = "cmd /c \""+ cmd +"\"";
Process process = Runtime.getRuntime().exec(finalCmd);
Thread.sleep(10);
boolean alive = process.isAlive();
变量alive的值为True,但我没有看到进程启动。程序执行完成后,才开始该过程,我不确定为什么会发生这种情况。
另外为了显示控制台窗口,我从google发现我需要使用以下命令:
String finalCmd = "cmd /c start cmd.exe /c \"" + cmd + "\"";
但是,有了这个,进程会立即启动,但我没有得到进程句柄,因为我发现 live 变量显示为 false。
有人知道如何实现这个目标吗?如果不能同时执行这两项操作,我可以,但至少我需要启动流程执行并获取句柄,以便稍后在我的代码中监控流程状态。
【问题讨论】:
标签: java command-line process