| 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<String> command, Map<String, String> 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<String, String> 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(); | 
|         } | 
|     } | 
| } |