Java: 如何扫描 ide 输出的最大数字?
Java: How to scan ide output for the highest number?
所以我有这段代码打印出从任务管理器到 netbeans 中的 ide 的 运行 进程,但我想扫描进程的输出,以便我可以列出最高的 运行 当时我的电脑上有进程吗?
public static void main(String[] args) throws IOException {
try {
String tasklist;
Process p = Runtime.getRuntime().exec
(System.getenv("windir") +"\system32\"+"tasklist.exe");
try (BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()))) {
while ((tasklist = input.readLine()) != null) {
System.out.println(tasklist); //<-- Parse data here.
}
}
} catch (IOException err) {
err.printStackTrace();
}
}
例如,这会给我以下输出,如果我想杀死 netbeans,因为它 运行 超过 500,000k,我该怎么做?
Image Name PID Session Name Session Mem Usage
chrome.exe 3464 Console 3 159,672 K
netbeans64.exe 3664 Console 3 592,216 K
chrome.exe 3808 Console 3 384,556 K
java.exe 2040 Console 3 36,732 K
tasklist.exe 2208 Console 3 6,196 K
你迭代那个数据;并收集您感兴趣的那些属性;例如名称、PID,当然还有内存使用情况。
您可能会创建一个 class 喜欢
public class RunningProcessInfo {
private final String name ...
public RunningProcessInfo(String name, int pid, int memUsage) {
换句话说:您编写的解析代码将一行作为
chrome.exe 3464 Console 3 159,672 K
并把它变成
new RunningProcessInfo("chrome.exe", 3464, 159672)
(通过解析输入的字符串;并将“3464”等字符串转换为数字等)。
意思是:你将System.out.println(tasklist);
行替换为
行中的内容
processInfos.add( parseLine(tasklist) );
其中 processInfos
是一些 ArrayList<RunningProcessInfo>
和 parseLine()
是采用单行并获取数据以构建新的 RunningProcessInfo 对象的方法。
您将这些对象收集在一个列表中。然后迭代该列表以查找满足特定条件的所有对象。
最后,您使用另一个进程构建器发送一个命令来终止您打算终止的那些 PID(请参阅 here 以了解如何执行此操作的示例)。当然,您要注意 - 因为您肯定不想在该会话是 运行 您的程序时终止您的 netbeans 会话 ...
所以我有这段代码打印出从任务管理器到 netbeans 中的 ide 的 运行 进程,但我想扫描进程的输出,以便我可以列出最高的 运行 当时我的电脑上有进程吗?
public static void main(String[] args) throws IOException {
try {
String tasklist;
Process p = Runtime.getRuntime().exec
(System.getenv("windir") +"\system32\"+"tasklist.exe");
try (BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()))) {
while ((tasklist = input.readLine()) != null) {
System.out.println(tasklist); //<-- Parse data here.
}
}
} catch (IOException err) {
err.printStackTrace();
}
}
例如,这会给我以下输出,如果我想杀死 netbeans,因为它 运行 超过 500,000k,我该怎么做?
Image Name PID Session Name Session Mem Usage
chrome.exe 3464 Console 3 159,672 K
netbeans64.exe 3664 Console 3 592,216 K
chrome.exe 3808 Console 3 384,556 K
java.exe 2040 Console 3 36,732 K
tasklist.exe 2208 Console 3 6,196 K
你迭代那个数据;并收集您感兴趣的那些属性;例如名称、PID,当然还有内存使用情况。
您可能会创建一个 class 喜欢
public class RunningProcessInfo {
private final String name ...
public RunningProcessInfo(String name, int pid, int memUsage) {
换句话说:您编写的解析代码将一行作为
chrome.exe 3464 Console 3 159,672 K
并把它变成
new RunningProcessInfo("chrome.exe", 3464, 159672)
(通过解析输入的字符串;并将“3464”等字符串转换为数字等)。
意思是:你将System.out.println(tasklist);
行替换为
processInfos.add( parseLine(tasklist) );
其中 processInfos
是一些 ArrayList<RunningProcessInfo>
和 parseLine()
是采用单行并获取数据以构建新的 RunningProcessInfo 对象的方法。
您将这些对象收集在一个列表中。然后迭代该列表以查找满足特定条件的所有对象。
最后,您使用另一个进程构建器发送一个命令来终止您打算终止的那些 PID(请参阅 here 以了解如何执行此操作的示例)。当然,您要注意 - 因为您肯定不想在该会话是 运行 您的程序时终止您的 netbeans 会话 ...