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服务,对外暴漏接口,请求处理逻辑按需要控制进程启停;