需求:有Windows模型 程序名相同,但是只想停止指定路径下的该模型,其余同名模型不能停止;
代码:
/**
* kill指定路径下程序
*
* @param dirName 需要匹配的路径
* @param exeName 程序名
* @return boolean
*/
public static boolean killExeByPid(String dirName,String exeName) {
Process exec = RuntimeUtil.exec("cmd /c tasklist | findstr " + exeName);
List<String> resultLines = RuntimeUtil.getResultLines(exec);
List<String> pidList = new ArrayList<>();
for (String resultLine : resultLines) {
String[] split = resultLine.split("\\s+");
String s = split[1];
pidList.add(s);
}
for (String s : pidList) {
Process getDir = RuntimeUtil.exec("cmd /c wmic process get name,executablepath,processid|findstr " + s);
String dirStr = RuntimeUtil.getResult(getDir);
String[] split = dirStr.split("\\s+");
String dir = split[0];
if (dir.contains(dirName)) {
Process stopByPidResult = RuntimeUtil.exec("cmd /c taskkill /pid " + s + " -f");
String result = RuntimeUtil.getResult(stopByPidResult);
return true;
}
}
return true;
}
首先通过 tasklist | findstr '程序名' 获取所有同名程序的pid
再通过 wmic process get name,executablepath,processid|findstr 'pid' 来获取到pid对应的文件路径 判断是否包含需要结束的文件路径;
最后通过 taskkill /pid " + 'pid' + " -f 杀掉进程
注:代码中运行命令的代码使用了糊涂的工具包,可自行替换为 Runtime.getRuntime().exec