我正在开发一个能够运行程序的应用程序,监视它们以便在用户意外关闭程序时重新打开,并在注销时关闭程序。
我可以通过解析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命令并比较进程是否退出
答案 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());
}