我正在尝试通过Tomcat应用程序调用批处理文件。批处理可以成功执行,但是在批处理中的超时命令无法暂停批处理。当直接执行批处理时,超时命令会按预期暂停进程。
我是这样调用批处理的: Runtime.getRuntime().exec("test.bat");
我正在尝试通过Tomcat应用程序调用批处理文件。批处理可以成功执行,但是在批处理中的超时命令无法暂停批处理。当直接执行批处理时,超时命令会按预期暂停进程。
我是这样调用批处理的: Runtime.getRuntime().exec("test.bat");
Runtime.getRuntime().exec()
时,启动进程的输入和输出流将被重定向。由此启动的timeout
继承相同的句柄。timeout
试图访问控制台, 但由于重定向而无法执行此操作。<nul timeout /t 10
timeout
失败。( timeout /t 10 || >nul ping -n 11 localhost ) 2>nul
timeout
失败,则执行ping
命令以强制等待。powershell -noprofile -command "& {[system.threading.thread]::sleep(5000)}"
Java:
ProcessBuilder processBuilder = new ProcessBuilder("cmd", "/C", "do.bat");
processBuilder.inheritIO();
processBuilder.redirectError(ProcessBuilder.Redirect.DISCARD);
processBuilder.redirectOutput(ProcessBuilder.Redirect.DISCARD);
processBuilder.start();
这将静默执行批处理文件,包括等待。