我们有一个 32 位进程 A,它必须启动另一个必须在 64 位进程中运行的 java jar。它们通过套接字进行通信。该系统运行良好。
但在极少数情况下,我们会看到第二个进程 (B) 挂起,直到我们关闭启动它的进程 (A)。在调试此问题时,我想读取进程 B 的输入流以查看正在输出哪些消息,并看到从进程 B 的输入流中读取的内容解决了该问题。所以我们创建了一个哑线程,它只读取进程 B 的输入流,一切正常。
这个问题很奇怪,但我们不得不继续前进。我们认为它与控制台输出缓冲区大小或类似的东西有关。但是我们已经看到这个问题出现在新安装的机器上,尽管我们读取了启动进程 (B) 的输入流。
尽管这种情况非常罕见,但我们希望绝对确定为什么会发生这种情况。可能是什么原因?是否有我们不知道的默认设置?你以前遇到过这样的情况吗?
快速总结:
- 进程 A 在 32 位进程中运行
- 进程 B 在 64 位进程中运行
- 进程 A 通过指向 64 位 javaw.exe 发出 Runtime.exec 来启动进程 B
- 进程 B 挂起,直到我们关闭进程 A
- 我们看到进程B出现在任务管理器中