Java-如何获取进程/任务的状态(windows)?
我正在和朋友们用JAVA为我的学校制作一个“应用程序”,它必须获得在Windows上运行的进程/任务的状态。 例如,当“chrome.exe*32”在实际打开的会话上运行时,他必须返回一个值 我可能错了,但我想用这样的方法:Java-如何获取进程/任务的状态(windows)?,java,Java,我正在和朋友们用JAVA为我的学校制作一个“应用程序”,它必须获得在Windows上运行的进程/任务的状态。 例如,当“chrome.exe*32”在实际打开的会话上运行时,他必须返回一个值 我可能错了,但我想用这样的方法: if([this is the part I know now what to put here] == true) { return a value } 或者可能是进程占用的内存,我真的不知道如何获得这个值 谢谢。我通过创建一个运行powershell命
if([this is the part I know now what to put here] == true)
{
return a value
}
或者可能是进程占用的内存,我真的不知道如何获得这个值
谢谢。我通过创建一个运行powershell命令的进程并将结果信息读回,解决了这个问题:
Process p = new ProcessBuilder()
.command("powershell", "invoke-command", "-computerName", "MYCOMPUTER", "-filepath", ".\\someScript.psl")
.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
p.waitFor();
List<String> results = new LinkedList();
String line;
while ((line == reader.readLine()) != null) results.add(line);
您可以使用Java9的ProcessHandle接口获取有关进程的信息。 要获取有关进程的信息,只需使用以下代码进行迭代并使用processHandle方法
ProcessHandle.allProcesses().forEach(process -> processStateInfo(process));
下面的代码迭代所有进程,并打印有关这些进程的一些信息
public class JavaProcess {
public static void main(String[] args) {
ProcessHandle.allProcesses().forEach(process -> getProcessInfo(process));
}
private static void getProcessInfo(ProcessHandle process) {
System.out.println("PID == "+process.pid());
System.out.println("Is ProcessAlive=="+process.isAlive());
System.out.println("Command=="+process.info().command());
System.out.println("ProcessStartTime=="+process.info().startInstant());
System.out.println("Duration=="+process.info().totalCpuDuration());
System.out.println("Process User=="+process.info().user());
}
}
请注意,isAlive()方法可能会在一段时间内返回true,即使在请求终止进程之后也是如此。这是因为进程是异步终止的
这是ProcessHandle接口的文档。
在发布此消息之前,您是否尝试过在Stack Overflow或Google上搜索可能的帮助?不太可能有人会根据您当前的问题向您提供所需的完整代码。谢谢您的回答。谢谢您的回答。
public class JavaProcess {
public static void main(String[] args) {
ProcessHandle.allProcesses().forEach(process -> getProcessInfo(process));
}
private static void getProcessInfo(ProcessHandle process) {
System.out.println("PID == "+process.pid());
System.out.println("Is ProcessAlive=="+process.isAlive());
System.out.println("Command=="+process.info().command());
System.out.println("ProcessStartTime=="+process.info().startInstant());
System.out.println("Duration=="+process.info().totalCpuDuration());
System.out.println("Process User=="+process.info().user());
}
}