gpt4 book ai didi

java - 订购 Runtime exec 和 ProcessBuilder.start?

转载 作者:行者123 更新时间:2023-11-30 04:36:39 25 4
gpt4 key购买 nike

我在通过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 低?)。

我已经在运行时执行返回时使用 waitFor 解决了这个问题,但我很好奇为什么会出现这个问题。

最佳答案

基本上,Runtime.exec 在操作系统中异步启动一个新进程,并且不能保证它在新进程启动之前完成。理论上,您应该等待 taskkill 返回并返回 SUCCESS 结果,然后才开始新作业。根据其文档 taskkill 会告诉您 0 返回代码是否已成功杀死嫌疑人。

关于java - 订购 Runtime exec 和 ProcessBuilder.start?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13345666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com