java如何起进程
启动进程的方法
在Java中启动进程可以通过ProcessBuilder或Runtime.exec()实现。这两种方式各有特点,适用于不同场景。
使用Runtime.exec()
Runtime.exec()是传统的启动进程方法,适用于简单命令执行。以下是一个示例:
String command = "notepad.exe";
Process process = Runtime.getRuntime().exec(command);
// 获取进程输出流
InputStream inputStream = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
// 等待进程结束
int exitCode = process.waitFor();
System.out.println("Exit code: " + exitCode);
使用ProcessBuilder
ProcessBuilder提供了更灵活的进程控制,支持设置工作目录和环境变量:

ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", "dir");
builder.directory(new File("C:\\")); // 设置工作目录
// 设置环境变量
Map<String, String> env = builder.environment();
env.put("VAR", "value");
// 启动进程并获取输出
Process process = builder.start();
InputStream inputStream = process.getInputStream();
// 处理输出流...
处理输入输出流
启动的进程会产生输入、输出和错误流,需要正确处理以避免阻塞:
Process process = new ProcessBuilder("command").start();
// 获取输出流
InputStream stdout = process.getInputStream();
InputStream stderr = process.getErrorStream();
// 使用线程异步读取输出
new Thread(() -> {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(stdout))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println("OUT: " + line);
}
} catch (IOException e) {
e.printStackTrace();
}
}).start();
// 类似处理错误流...
等待进程结束
使用waitFor()方法可以等待进程执行完成:

int exitCode = process.waitFor();
if (exitCode == 0) {
System.out.println("执行成功");
} else {
System.out.println("执行失败,退出码:" + exitCode);
}
超时控制
为防止进程长时间运行,可以设置超时:
if (process.waitFor(30, TimeUnit.SECONDS)) {
System.out.println("进程正常结束");
} else {
process.destroyForcibly();
System.out.println("进程超时被终止");
}
注意事项
启动外部进程时需注意命令注入风险,避免直接拼接用户输入作为命令参数。建议对输入进行严格验证或使用参数化方式传递参数。
不同操作系统对命令解析方式不同,跨平台应用需要特别注意路径分隔符和命令格式的差异。






