使用Runtime.getRuntime().exec()启动bat脚本后,需获取其进程ID,再通过taskkill命令终止。执行杀进程命令前需设置1秒睡眠,确保操作系统完成进程清理,否则可能因进程提前结束而失败。
Java Runtime.getRuntime().exec()执行bat脚本遇到的坑及解决
作者:技术拾光
时间:2026-07-23
浏览:265
文章目录
Java 启动 bat 脚本使用 Runtime.getRuntime().exec()
近期在微服务开发项目中,需要从主函数启动时调用接口来启动另一个服务。当时采用 bat 脚本启动,具体代码如下:

从日志中可以看到启动时打印出的信息。
使用
Runtime.getRuntime().exec(f + "dataimport_start.bat");
启动 bat 脚本的具体实现:
Process exec = Runtime.getRuntime().exec(f + "\dataimport_start.bat");
InputStream in = exec.getInputStream();
String line;
BufferedReader br = new BufferedReader(new InputStreamReader(in));
while ((line = br.readLine()) != null) {
System.out.println(line);
}
启动完成后,前端需要关闭这个 bat 脚本,继续使用 Runtime 来实现。
解决代码
直接上代码:
public String stopTrain(String pid) throws Exception{
Process process;
process = Runtime.getRuntime().exec("taskkill /pid " + pid + " -t -f");
Thread.sleep(1000);
process.getOutputStream().close();
process.destroy();
return "关闭成功!";
}
此处通过进程 ID 来结束进程。注意其中 1 秒的睡眠时间——当执行 process = Runtime.getRuntime().exec("taskkill /pid " + pid + " -t -f"); 命令时,操作系统需要时间来完成杀进程操作。如果不提供这 1 秒缓冲,所创建的进程还没来得及执行完命令,自身就会被杀死,导致关闭失败。
总结
以上是实际开发中踩过的坑,希望对遇到类似问题的朋友有所帮助。
实用工具推荐
电子包浆
使用 ›绿化、压缩、噪点和虚拟水印,自由调节做旧程度。
图片压缩
使用 ›选择画质和输出格式,预览压缩前后的大小。
相关文章