在使用Runtime.exec()
在java中创建子进程时,我知道必须填充输入/输出流以防止对子进程进行阻塞。Java,子进程和未读输出流:它何时死锁?
有趣的是,Process
的Javadoc指出一点点:
...failure to promptly write the input stream or read the output stream of
the subprocess may cause the subprocess to block, and even deadlock.
我想知道,在这种情况下,子进程就可以也死锁!
问题:
1.在哪些情况下会死锁?
2.它为什么会陷入僵局?
3.你能提供一个简短的例子程序来显示这个死锁吗?
4.这个死锁是OS中的一个错误吗?
+1 ... *(不是你的问题的答案,因此评论)* ...请注意,很久以前(当我读*“当Runtime.exec不会”* IIRC),我决定通过立即从Runtime.exec'ed shell脚本分支/退出并将第二个shell脚本的任何输出重定向到临时文件(然后从Java解析这些临时文件)来完全避免该问题。这是残酷的,但它的作品(我已经在Linux和OS X上做过...不知道Windows):) – TacticalCoder 2012-02-21 16:17:18