在通过java运行和终止进程时,我遇到了一个奇怪的问题。
基本上,我有一个使用taskkill杀死一个进程的方法:
private static void kill() {
try {
Runtime.getRuntime().exec("taskkill /F /IM app.exe");
} catch (IOException e) {
e.printStackTrace();
}
}我调用这个方法来确保在我开始一个新的进程之前所有的进程都被终止了:
kill();
ProcessBuilder procBuilder = new ProcessBuilder(args);
try {
Process p = procBuilder.start();
} catch (Exception e) {
e.printStackTrace();
}问题是启动的进程似乎被taskkil杀死了。在不调用kill的情况下,它可以很好地工作;而使用kill时,进程会启动,但GUI不会出现。
这是两次呼叫之间的优先级问题吗?( runtime.exec的优先级比ProcessBuilder.start低?)。
我已经在运行时exec返回时使用waitFor解决了这个问题,但我很好奇为什么会出现这个问题。
发布于 2012-11-12 22:47:27
基本上,Runtime.exec在OS中异步启动一个新进程,并且不能保证它在您的新进程启动之前完成。理论上,你应该等待taskkill返回一个SUCCESS结果,然后再开始你的新工作。根据它的文档,如果taskkill成功杀死了它的嫌疑人,它将以0返回代码告诉你。
https://stackoverflow.com/questions/13345666
复制相似问题