我有一个java应用程序,它由一个线程组成,它监视数据库中包含要执行的shell脚本的表。我每隔几秒钟查一次数据库。对于一个脚本,执行它(通过Process类),并在表中等待另一个脚本。
我的问题是:有时,脚本中的某些命令会失败。线程捕获错误流并将其记录在数据库中。但是,它会继续记录消息,并且控件不会从脚本返回到Java,因此数据库中的后续shell脚本无法执行。
这附近有工作吗?
发布于 2009-05-14 19:50:24
您是否同时读取了标准输出和标准错误?你是用不同的线程来做这件事吗?可以根据使用脚本输出的方式对其中一个进行阻塞,而且我有一种预感,您的脚本被阻塞,等待父进程使用它的输出。
来自流程文档:
由于一些本机平台只为标准输入和输出流提供有限的缓冲区大小,因此未能及时写入输入流或读取子进程的输出流可能会导致子进程阻塞,甚至死锁。
请参见这个问题和引用“流杯”的示例代码。2‘杯杯被创建,消耗标准外和标准错误。
https://stackoverflow.com/questions/865277
复制相似问题