在我的Java程序中,我使用以下语句运行foo.exe
:
Process process = new ProcessBuilder("foo.exe", parameter1,parameter2).start();
process.waitFor();
在我的foo.exe
中,它是用C ++编写的,如下所示:
int main(int argc, char *argv[])
{
//some statement
return 0;
}
然而,从任务管理器,foo.exe
将不会终止,我的java程序挂在waitFor()
语句。我尝试将return 0
更改为exit(0)
但没有运气。
我必须通过任务管理器手动结束foo.exe
以使我的java继续运行。还有其他解决方案吗?
修改:如果我发表评论process.waitFor()
,foo.exe
会正确终止。但是,Java不会等待foo.exe
首先完成执行,这不是我预期的。
答案 0 :(得分:2)
我想通了。
起初我不明白MadProgrammer的暗示,他的回答恰恰指出了问题的原因:
某些本机平台仅为标准提供有限的缓冲区大小 输入和输出流,无法及时写入输入流 或者读取子进程的输出流可能会导致子进程 阻止,甚至死锁。
ProcessBuilder pb = new ProcessBuilder("foo.exe",parameter1,parameter2);
//process.waitFor();
Process p = pb.start();
int result = p.waitFor(); // i guess this is the way
非常感谢MadProgrammer和jaco0646