package com.ruoyi.utils.process; import lombok.extern.slf4j.Slf4j; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.Charset; import java.util.List; import java.util.Map; /** * @Description: cmd命令工具类 * @ClassName: CmdUtils * @Author: 刘苏义 * @Date: 2023年07月29日13:24:21 * @Version: 1.0 **/ @Slf4j(topic = "cmd") public class CmdUtils { //启动命令1 public static void commandStart(String processName, List command, Map env) { log.debug("启动外部程序:【" + processName+"】"); // command.forEach(v -> log.debug(v + " ")); log.debug(String.join(" ", command)); ProcessBuilder builder = new ProcessBuilder(); // 获取子进程的环境变量映射 if (env != null) { env.entrySet().forEach(entry -> { log.debug(entry.getKey() + ":" + entry.getValue()); }); Map envMap = builder.environment(); envMap.putAll(env); } //正常信息和错误信息合并输出 builder.redirectErrorStream(true); builder.command(command); //开始执行命令 Process process = null; try { process = builder.start(); //如果你想获取到执行完后的信息,那么下面的代码也是需要的 // String line = ""; // BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); // while ((line = br.readLine()) != null) { // System.out.println(line); // } } catch (IOException e) { log.error("cmd异常:" + e.getMessage()); } } // 结束指定名称的进程 public static void stopProcess(String processName) { log.debug("尝试结束进程:" + processName); ProcessBuilder builder = new ProcessBuilder("taskkill", "/F", "/IM", processName); Process process; try { process = builder.start(); //如果你想获取到执行完后的信息,那么下面的代码也是需要的 String line = ""; BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream(), Charset.forName("GBK"))); while ((line = br.readLine()) != null) { log.debug("回显:" + line); } } catch (IOException e) { e.printStackTrace(); } } // 检查指定名称的进程是否正在运行 public static boolean isProcessRunning(String processName) { try { ProcessBuilder builder = new ProcessBuilder("tasklist"); Process process = builder.start(); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = reader.readLine()) != null) { if (line.contains(processName)) { log.debug("进程" + processName + "已存在"); return true; } } reader.close(); } catch (IOException e) { e.printStackTrace(); } log.debug("进程" + processName + "不存在"); return false; } //启动命令2 public static void commandStart(String[] command) { //构建启动命令,使用cmd /c start命令来启动可执行程序并显示命令提示符窗口 ProcessBuilder processBuilder = new ProcessBuilder(command); processBuilder.redirectErrorStream(true); // 将错误输出重定向到标准输出 Process process = null; try { process = processBuilder.start(); } catch (IOException e) { e.printStackTrace(); } //如果你想等待程序完成 try { int exitCode = process.waitFor(); } catch (InterruptedException e) { e.printStackTrace(); } } }