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("已執行殺進程");
}