获取当前正在运行的进程

时间:2017-01-28 01:11:56

标签: java runtime bufferedreader explorer finder

我正在制作一个节目,这个节目需要能够看到" finder"适用于Mac或"文件资源管理器" for Windows已经打开。我试图使用tutorial来做到这一点。我现在得到的这段代码似乎可以用于列出所有正在运行的进程。

但问题在于它不是当前正在运行的那些,这意味着它将列出在下午2点运行的进程,即使它是凌晨3点或类似的。这意味着如果我要检查列出的进程是否包含Finder或文件资源管理器,它将返回true,无论它是什么样的系统应用程序一直运行而不能像常规下载一样关闭。 exe,关闭它的唯一方法是重新启动finder或explorer。这最初会使用查找器或资源管理器更新进程列表。但通常在以用户身份打开finder或explorer时,您不必每次都重新启动应用程序,只需打开资源管理器或查找器,它不会触发新的运行时进程。检查它是否刚被打开有点困难。

我想知道是否有一种方法可以修改我的代码,以便检查finder或explorer的进程是否刚刚启动。它只需在刚刚启动时触发,而不是在它已经运行时触发。 我在下面列出了我正在使用的代码。

package readPList;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class MyProcReader {
    public static void main(String[] args) {
        try {
            String process;

            Process p = Runtime.getRuntime().exec("ps -few");
            BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
            while ((process = input.readLine()) != null) {
                System.out.println(process); 

            }
            input.close();
        } catch (Exception err) {
            err.printStackTrace();
        }
    }
}

对于Mac,我使用"ps -few"行中的行"getRuntime()",对于Windows,我使用行System.getenv("windir") +"\\system32\\"+"tasklist.exe"

2 个答案:

答案 0 :(得分:0)

对于Mac,我建议的另一种方法是使用AppleScript,它允许您检查应用程序是否正在运行。您可以整合Applescript in java

请在以下链接中找到:check如果应用程序在AppleScript中运行,请参阅答案的更新部分。

答案 1 :(得分:0)

新的Java 9提供了ProcessHandle API(可进行本地调用):

mydictionary = {
    'object_1': [7,19],
    'object_2': [0,3],
    'object_3': [54,191],
    'object_4': [41,43],
}