关于 java:timeout 命令在批处理文件中不起作用

timeout command not working in batch files

我正在尝试通过 tomcat 应用程序调用批处理文件。批处理正常执行,但是批处理中的超时命令并没有暂停批处理。直接执行批处理时,超时确实会按预期暂停进程。

我正在调用批处理:
Runtime.getRuntime().exec("test.bat");


当您调用 Runtime.getRuntime().exec() 时,已启动进程的输入和输出流被重定向。从此进程启动的 timeout 继承了相同的句柄。

问题是 timeout 试图访问控制台,但由于重定向它无法做到这一点。

您可以从控制台运行测试此行为

1
<nul timeout /t 10

当输入流被重定向时,timeout 失败。

一种解决方法可能是

1
( timeout /t 10 || >nul ping -n 11 localhost ) 2>nul

如果timeout失败,则执行ping命令强制等待。