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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM