java调用系统命令(执行杀进程命令)

private static final Logger logger = LoggerFactory.getLogger(CmdUtil.class);

/**
     * 杀死进程
     * taskkill 参数列表:
     * /S system         指定要连接到的远程系统。
     * /U [domain\]user 指定应该在哪个用户上下文执行这个命令。
     * /P [password]     为提供的用户上下文指定密码。如果忽略,提示输入。
     * /F                 指定要强行终止的进程。
     * /FI filter         指定筛选进或筛选出查询的的任务。
     * /PID process id     指定要终止的进程的PID。
     * /IM image name     指定要终止的进程的映像名称。通配符 '*'可用来指定所有映像名。
     * /T Tree kill:     终止指定的进程和任何由此启动的子进程。
     * @param processName 进程名称
     * @throws Exception
     */
public static void killProc(String processName) throws Exception {
System.out.println("关闭应用程序:" + processName);
executeCmd("taskkill /F /T /IM " + processName);
}

/**
     * 执行CMD命令
     * cmd /c dir 是执行完dir命令后关闭命令窗口。 
     * cmd /k dir 是执行完dir命令后不关闭命令窗口。
     * cmd /c start dir 会打开一个新窗口后执行dir指令,原窗口会关闭。 
     * cmd /k start dir 会打开一个新窗口后执行dir指令,原窗口不会关闭。 
     * @param command cmd命令
     * @return    命令执行输出语句
     * @throws IOException
     * @throws InterruptedException 
     */
private static String executeCmd(String command) throws IOException, InterruptedException {
Process process = Runtime.getRuntime().exec(command);
process.waitFor();//等待子进程完成再往下执行。
//创建bufferedReader
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream(),"GBK"));
String line = null;
StringBuilder build = new StringBuilder();
while ((line = bufferedReader.readLine()) != null) {
line = new String(line.getBytes("UTF-8"));
build.append(line);
}
bufferedReader.close();
int i = process.exitValue(); //接收执行完毕的返回值
if (i != 0) {
logger.error("log info :","cmd执行失败");
throw new RuntimeException("cmd执行失败");
}
process.destroy(); //销毁子进程
process = null;
return build.toString();
}

/**
* linux查询对应进程名并kill
* @throws Exception
*/
public static void killProcess(String processName) throws Exception{
//1.首先通过
Process pid=Runtime.getRuntime().exec("pidof "+ processName);
//找出linux当前运行的所有进程。
//2.再把pid写入流中:
BufferedReader br = new BufferedReader(new InputStreamReader(
pid.getInputStream()), 1024);
//3.读取流中的指定信息:
String line = br.readLine();
logger.info("进程分流信息是:"+ line);
if (StringUtils.isNotEmpty(line)){
Process pi=Runtime.getRuntime().exec("kill -9 "+line);
}
logger.info("已执行杀进程");
}
posted @ 2020-09-15 15:14  yizw  阅读(1690)  评论(0编辑  收藏  举报