Author:赵志乾
Date:2024-07-05
Declaration:All Right Reserved!!!
1. 简介
Java内启动一个外部进程(操作系统级别的进程),通常使用ProcessBuilder类。其可以方便、灵活地启动和管理子进程,并且可以为子进程设置环境变量、工作目录以及将输入传给子进程,并捕获其输出。
2. 代码示例
//*********************核心字段************************
// 子进程
private Process process;
// 子进程工作目录
private final File workDirectory = new File("/app/");//*********************核心方法************************
public synchronized boolean start(String traceId) {// step1: 若子进程已启动,则先终止子进程if (process!= null && process.isAlive()) {process.destroy();process= null;}// step2: 依据操作系统类型选择不同的启动命令String osName = System.getProperty("os.name").toLowerCase();ProcessBuilder processBuilder;if (osName.contains("win")) {processBuilder = new ProcessBuilder("java.exe", "-cp", "\"demo.jar;lib/*;\"", "Main", "traceId=" + traceId);} else if (osName.contains("nix") || osName.contains("nux") || osName.contains("aix")) {processBuilder = new ProcessBuilder("java", "-cp", "\"demo.jar:lib/*:\"", "Main", "traceId=" + traceId);} else {return false;}// step3: 设置子进程工作目录processBuilder.directory(workDirectory);// step4: 启动子进程try {simulatorProcess = processBuilder.start();return true;} catch (IOException e) {throw new RuntimeException(e);}
}
3. 应用场景
通过webApi控制服务器上某些进程的启停:使用SpringBoot搭建Web服务,对外暴漏接口,请求处理逻辑按需要控制进程启停;