为什么java中的processBuilder会在5分钟后挂起?
我hava命令行处理超过5分钟。 当我使用ProcessBuilder调用命令行时,它可以在5分钟内完成作业。
如果流程耗时超过5分钟并且流程没有改进,直到我退出流程,流程就会挂起。
p = new ProcessBuilder("myprogram","with","parameter").start(); p.waitFor();
如果您不理解上述问题,请告诉我?
问题可能是,命令“myprogram”产生一些输出,而你没有读它。 这意味着一旦缓冲区已满,该进程就会被阻止,并等待您的进程继续读取。 您的进程反过来等待其他进程完成(这不会因为它等待您的进程,…)。 这是一个典型的僵局。
您需要不断读取进程输入流以确保它不会阻塞。
Javadocs说:
课程流程
由于某些本机平台仅为标准输入和输出流提供有限的缓冲区大小,因此无法及时写入输入流或读取子进程的输出流可能导致子进程阻塞,甚至死锁。
无法从Process清除输入流的缓冲区(管道到子进程的输出流)可能导致子进程阻塞。