Fra*_*ero 2 java windows process
我正在尝试做的是一个程序,以了解它是否Windows在Java. 我在网上查了一下,找到了两种不同的解决方案:
但这根本不是我要找的。
根据选项 1,我想要一种方法来引用进程(并检测它是否处于活动状态/正在运行),但无需进行完整tasklist搜索,然后对其进行搜索。我正在寻找是否有直接的方法来做到这一点。
我也向任务列表添加了一个过滤器,但找不到任何过滤器来获取我正在寻找的进程。我tasklist /?在命令行上看到了所有使用的选项。
然后我搜索了有关第二个选项和wmic(我以前从未听说过的)的信息,它似乎wmic允许您在命令行上执行任务(如果我错了,请纠正我)。
所以,在这里我有两个问题:
是否有直接方法可以知道进程是否在使用 Java 的 Windows 上处于活动状态?尽量避免在完整的任务列表中搜索或使用wmic.
如果不可能,如果我们谈论高效编程,我上面提到的两个选项中哪个更好?
提前致谢!
没有直接的方法来查询一般进程,因为每个操作系统对它们的处理方式不同。
你有点坚持使用代理,比如直接操作系统命令......
但是,您可以使用带有/fi参数的tasklist.exe 查找特定进程。
例如:tasklist.exe /nh /fi "Imagename eq chrome.exe"
注意强制性的双引号。MS Technet 站点
上提供了语法和用法。
同样的例子,在 Java 中过滤“chrome.exe”:
String findProcess = "chrome.exe";
String filenameFilter = "/nh /fi \"Imagename eq "+findProcess+"\"";
String tasksCmd = System.getenv("windir") +"/system32/tasklist.exe "+filenameFilter;
Process p = Runtime.getRuntime().exec(tasksCmd);
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
ArrayList<String> procs = new ArrayList<String>();
String line = null;
while ((line = input.readLine()) != null) 
    procs.add(line);
input.close();
Boolean processFound = procs.stream().filter(row -> row.indexOf(findProcess) > -1).count() > 0;
// Head-up! If no processes were found - we still get: 
// "INFO: No tasks are running which match the specified criteria."