我的 Java 程序使用 ProcessBuilder(redirectErrorStream 设置为 true),并有一个循环运行进程的输入流的 read 方法,该方法是阻塞的。然后我调用的外部程序停止等待输入和标准输入。我现在想终止该进程。这不是通过(在单独的线程中)调用进程的 destroy 方法,并调用输入流的 close 方法来阻止 read 方法再阻塞来完成的,以便我的初始线程可以结束其生命吗?
因为某些原因process.getInputStream().close()
块。从 JavaDoc 我不明白为什么会发生这种情况。此外,我不明白为什么 javadoc 说“InputStream 的 close 方法什么也不做”。 (链接到 javadoc http://java.sun.com/javase/6/docs/api/java/io/InputStream.html#close())有人可以解释一下吗?
谢谢 :-)
关于阻塞行为,Java 中有一个已知问题,在与另一个进程通信时可能会导致死锁。我不知道这是否是您所看到的,但值得研究。该文件用于java.lang.Process http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Process.html says:
因为只有一些原生平台
提供有限的缓冲区大小
标准输入和输出流,
未能及时写入输入
流或读取输出流
子进程可能会导致
子进程阻塞,甚至
僵局。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)