导致主进程等待另一个进程完成

发布于 2024-08-21 09:48:11 字数 209 浏览 4 评论 0原文

我在java中遇到同步问题。 我希望我的主线程等待进程“p1”完成。 我使用了“等待”方法。它对我不起作用。

Process p1 = runtime.exec("cmd /c start /MIN " + path + "aBatchFile.bat" );
p1.waitFor();

有人可以帮我吗?

太感谢了。

I have a synchronization problem in java.
I want my main thread to wait until process "p1" is finished.
I have used "waitfor" method. it has not worked for me.

Process p1 = runtime.exec("cmd /c start /MIN " + path + "aBatchFile.bat" );
p1.waitFor();

Could anybody help me please?

Thank you so much.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

安静 2024-08-28 09:48:11

这里的问题是,您从 exec() 返回的 Process 对象代表您启动的 cmd.exe 实例。您的 cmd.exe 实例执行一件事:它启动一个批处理文件,然后退出(无需等待批处理文件,因为这就是 start代码>命令执行)。此时,您的 waitFor() 返回。

为了避免此问题,您应该能够直接运行批处理文件:

Process p1 = runtime.exec(path + "aBatchFile.bat");
p1.waitFor();

或者,尝试 /wait 命令行选项:

Process p1 = runtime.exec("cmd /c start /wait /MIN " + path + "aBatchFile.bat" ); 
p1.waitFor(); 

The problem here is that the Process object you get back from exec() represents the instance of cmd.exe that you start. Your instance of cmd.exe does one thing: it starts a batch file and then exits (without waiting for the batch file, because that's what the start command does). At that point, your waitFor() returns.

To avoid this problem, you should be able to run the batch file directly:

Process p1 = runtime.exec(path + "aBatchFile.bat");
p1.waitFor();

Alternately, try the /wait command line option:

Process p1 = runtime.exec("cmd /c start /wait /MIN " + path + "aBatchFile.bat" ); 
p1.waitFor(); 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文