Java-如何获取进程/任务的状态(windows)?

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命

我正在和朋友们用JAVA为我的学校制作一个“应用程序”,它必须获得在Windows上运行的进程/任务的状态。 例如,当“chrome.exe*32”在实际打开的会话上运行时,他必须返回一个值

我可能错了,但我想用这样的方法:

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());
    }

}