1、hutool+lombok+jdk1.8新特性读取window执行所有进程的信息
hutool+lombok读取window执行所有的信息
只要是记录些获取常用的列表信息。
实现均在window里面处理的代码,代码有用可以自己改造,个人无其他操作系统,个人非常穷
,无其他操作系统,也不想安装操作系统进行封装其他工具类。仅供参考学习,敬请原谅个人。
2、Maven导入jar
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.3.6</version>
</dependency>
<!-- 添加 lombok 依赖项 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<!-- 在编译时提供,运行时则不需要 -->
<scope>provided</scope>
</dependency>
3、 RuntimeUtil代码实现
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
*此代码是集成糊涂工具里面的RuntimeUtil
*/
public class RuntimeUtil extends cn.hutool.core.util.RuntimeUtil {
/**
* 通过进程id进行杀掉(停止)程序
*/
public static void killProcessByPid(String pid) {
try {
exec("taskkill /F /PID " + pid);
} catch (Exception ex) {
System.out.println("killProcessByPid exception" + ex.getMessage());
}
}
/**
* 通过进程名称进行杀掉(停止)程序
*/
public static void killProcessByPidName(String pidName) {
try {
exec("taskkill /F /IM " + pidName + ".exe");
} catch (Exception ex) {
System.out.println("killProcessByPidName exception" + ex.getMessage());
}
}
/**
* 通过程序名称找进程信息
*
* @param taskName
* @return
*/
public static boolean existTaskName(String taskName) {
try {
boolean anyMatch = getTaskList().stream()
.anyMatch(o -> o.getTaskName().contains(taskName));
return anyMatch;
} catch (Exception ex) {
return false;
}
}
public static String getPidTaskName(String taskName) {
try {
return getTaskList().stream()
.filter(f -> f.getTaskName().contains(taskName))
.map(TaskInfo::getProcessId).findFirst().get();
} catch (Exception ex) {
return "";
}
}
/**
* 获取对应的task信息
* @param taskName
* @return
*/
public static TaskInfo getOneTaskName(String taskName) {
try {
return getTaskList().stream()
.filter(f -> f.getTaskName().contains(taskName))
.findFirst().get();
} catch (Exception ex) {
return null;
}
}
/**
* 列出当window系统所有的task
*
* @return
*/
public static List<TaskInfo> getTaskList() {
try {
// 映像名称 | PID|会话| 会话Id| 内存使用
List<String> dataList = execForLines("tasklist");
List<TaskInfo> taskInfoList = new ArrayList<>();
for (int i = 0; i < dataList.size(); i++) {
//排除第一行的中文标题和第二行====分割线
if (i > 2) {
String[] parts = dataList.get(i).trim().split("\\s+");
String taskName = parts[0];
String processId = parts[1];
String sessionName = parts[2];
String sessionId = parts[3];
String memoryUsage = parts[4];
taskInfoList.add(TaskInfo.builder()
.taskName(taskName)
.processId(processId)
.sessionName(sessionName)
.sessionId(sessionId)
.memoryUsage(memoryUsage)
.build());
}
}
return taskInfoList;
} catch (Exception ex) {
System.err.println(ex.getMessage());
}
return null;
}
}
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
class TaskInfo implements Serializable {
private String taskName;
private String processId;
private String sessionName;
private String sessionId;
private String memoryUsage;
}
推荐学习博客:
推荐学习博客
此文章个人并没完全看完,原因我个人的需求没不需要那么多功能