exe不会使用Process在Java中终止

时间:2015-06-18 00:49:48

标签: java c++ process

在我的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首先完成执行,这不是我预期的。

1 个答案:

答案 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