上一篇
使用Java的
Runtime.getRuntime().exec()执行CMD命令关闭程序,
Runtime.getRuntime().exec("taskkill /f /im 程序名.exe")强制终止指定进程,适用于Windows系统。
在Java中,通过执行CMD命令关闭程序主要依赖Runtime.getRuntime().exec()或ProcessBuilder类,以下是详细实现方法和注意事项:
核心实现方法
直接执行CMD命令关闭程序(无窗口弹出)
public class CloseProgram {
public static void main(String[] args) {
try {
// 关闭指定进程(例如记事本)
String processName = "notepad.exe";
Runtime.getRuntime().exec("taskkill /F /IM " + processName);
System.out.println("程序已关闭!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
- 关键命令:
taskkill /F /IM 程序名.exe:强制终止进程(/F表示强制,/IM按进程名匹配)。- 示例:
taskkill /F /IM chrome.exe关闭所有Chrome窗口。
弹出CMD窗口再关闭程序(可见命令行)
public class CloseWithCmdWindow {
public static void main(String[] args) {
try {
// 弹出CMD窗口执行关闭命令
Runtime.getRuntime().exec("cmd /c start cmd.exe /k "taskkill /F /IM notepad.exe && exit"");
} catch (IOException e) {
e.printStackTrace();
}
}
}
- 命令解析:
cmd /c start:启动新CMD窗口。/k:执行后保留窗口(用/c可自动关闭窗口)。&&:连接多条命令(关闭程序后退出CMD)。
注意事项与优化
-
权限问题:

- 关闭系统进程需管理员权限,右键IDE或Jar包选择 “以管理员身份运行”。
- 代码中提权(谨慎使用):
if (System.getProperty("os.name").contains("Windows")) { Runtime.getRuntime().exec("runas /user:Administrator taskkill /F /IM 程序名.exe"); }
-
跨平台兼容:
- Windows:用
taskkill。 - Linux/macOS:用
pkill或killall:String command = System.getProperty("os.name").contains("Win") ? "taskkill /F /IM 程序名" : "pkill -f 程序名";
- Windows:用
-
错误处理:

- 检查进程是否存在:
Process process = Runtime.getRuntime().exec("tasklist"); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = reader.readLine()) != null) { if (line.contains("notepad.exe")) { // 进程存在,执行关闭 } }
- 检查进程是否存在:
-
安全风险:

- 避免硬编码进程名,可通过参数动态传入。
- 过滤用户输入,防止命令注入(如
; rm -rf /)。
完整示例代码
import java.io.*;
public class CloseProgramSafely {
public static void main(String[] args) {
String programName = "notepad.exe"; // 目标程序名
try {
// 检查操作系统类型
String os = System.getProperty("os.name").toLowerCase();
String command;
if (os.contains("win")) {
command = "taskkill /F /IM " + programName;
} else if (os.contains("nix") || os.contains("mac")) {
command = "pkill -f " + programName;
} else {
throw new UnsupportedOperationException("Unsupported OS");
}
// 执行命令
Process process = Runtime.getRuntime().exec(command);
int exitCode = process.waitFor(); // 等待命令执行完成
if (exitCode == 0) {
System.out.println(programName + " 已关闭!");
} else {
System.out.println("关闭失败,错误码:" + exitCode);
}
} catch (IOException | InterruptedException e) {
System.err.println("执行错误: " + e.getMessage());
}
}
}
常见问题解决
- 报错“权限不足”:以管理员身份运行Java程序。
- 进程名不匹配:用任务管理器确认精确进程名(如
chrome.exe非Google Chrome)。 - 无法关闭后台服务:需用
taskkill /PID <进程ID>指定PID。 - 跨平台失效:先打印
System.getProperty("os.name")检查系统识别。
引用说明
Runtime.exec()文档:Oracle官方指南- Windows命令参考:Microsoft taskkill文档
- Linux命令参考:pkill手册
通过上述方法,Java可安全调用系统命令关闭程序,关键是根据操作系统选择正确命令,并处理好权限与错误逻辑,确保代码健壮性。
