我們有一個32位進程A,它必須啓動另一個必須以64位進程運行的java jar。他們通過套接字進行通信。這個系統工作正常。從另一個java進程啓動java進程時進程掛起
但是在一些罕見的情況下,我們看到第二個過程(B)掛起,直到我們關閉啓動它的過程(A)。在我調試這個問題時,我想讀取進程B的輸入流以查看正在輸出什麼消息,並且看到從進程B的輸入流讀取的內容解決了問題。所以我們跨越了一個愚蠢的線程,只讀取進程B的輸入流,一切正常。
這個問題很奇怪,但我們不得不繼續前進。我們認爲它與控制檯輸出緩衝區大小或類似的東西有關。但是我們已經看到這個問題出現在新安裝的機器上,儘管我們讀取了啓動過程的輸入流(B)。
儘管發生的情況非常罕見,但我們希望能夠絕對確定發生這種情況的原因。可能是什麼原因?有沒有我們不知道的默認設置?你以前遇到過這種情況嗎?
快速摘要:
- 過程A運行在32位過程
- 處理B在一個64位的進程中運行
- 處理A通過通過指向發出的Runtime.exec開始處理B 64位的javaw.exe
- 進程B掛起,直到我們關閉進程A
- 我們看到進程B出現在任務管理器
我在問這個問題之前看過這篇文章,但想確定它是否是唯一可能的原因。從錯誤流中讀取是我們案例中唯一缺失的部分。 – idursun