为什么 java 中的 processBuilder 在 5 分钟后挂起?

Why processBuilder in java hangs after 5 mins?

我有一个处理超过 5 分钟的命令行。当我使用 ProcessBuilder 调用命令行时,它会在 5 分钟内完成该命令的工作。

如果进程超过 5 分钟就会挂起,并且在我退出进程之前不会显示进程有任何改进。

p = new ProcessBuilder("myprogram","with","parameter").start();
p.waitFor();

如果您不明白上述问题,请告诉我?

问题可能是,命令 "myprogram" 产生了一些输出,而您没有阅读它。这意味着一旦缓冲区已满,进程就会被阻塞,并等待您的进程继续读取。您的进程依次等待另一个进程完成(它不会因为它等待您的进程,......)。这是典型的死锁情况。

您需要不断地从进程输入流中读取以确保它不会阻塞。

Javadocs 说:

Class Process

Because some native platforms only provide limited buffer size for standard input and output streams, failure to promptly write the input stream or read the output stream of the subprocess may cause the subprocess to block, and even deadlock.

Fail to clear the buffer of input stream (which pipes to the output stream of subprocess) from Process may lead to a subprocess blocking.