我们有一个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