等到Runtime.exec运行的进程退出(“wmic进程调用create notepad.exe”)

时间:2017-08-16 14:40:43

标签: java windows bash

我正在开发一个能够运行程序的应用程序,监视它们以便在用户意外关闭程序时重新打开,并在注销时关闭程序。

我可以通过解析wmic process call create <program>的输入流来获取程序的进程ID。

我使用此代码段来运行程序并检测用户何时关闭程序。我的问题是我使用(wmic)命令运行程序后立即退出程序。

如何实现程序退出的检测?

我的代码:

public static void main(String[] args) {
        Process process = null;
        try {
            process = Runtime.getRuntime()
                    .exec("wmic process call create \"notepad.exe\"");
            BufferedReader stdin = new BufferedReader(
                    new InputStreamReader(process.getInputStream()));
            String processIdLine = "";
            String line;
            while ((line = stdin.readLine()) != null) {
                if (line.contains("ProcessId")) {
                    processIdLine = line;
                    break;
                }
                System.out.println(line);
            }
            stdin.close();
            String[] param = processIdLine.split("=");
            if (param.length > 1) {
                String pId = param[1];
                pId = pId.replaceAll(";", " ");
                pId = pId.replaceAll(" ", "");
                System.out.println("ID : " + pId);
            }
            try {
                process.waitFor();
              // I want it to hang here till notepad closed.
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("PROCESSE EXIT");
        } catch (IOException e) {
            e.printStackTrace();
        }
}

注意:我不想使用tasklist命令并比较进程是否退出

1 个答案:

答案 0 :(得分:0)

请查看 ZeroTurnaround ZT-exec 库,它为您提供了很多开箱即用的功能:

try {
  new ProcessExecutor().command("java", "-version").exitValues(3).execute();
} catch (InvalidExitValueException e) {
  System.out.println("Process exited with " + e.getExitValue());
}