在使用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