Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取当前正在运行的进程_Java_Runtime_Bufferedreader_Explorer_Finder - Fatal编程技术网

Java 获取当前正在运行的进程

Java 获取当前正在运行的进程,java,runtime,bufferedreader,explorer,finder,Java,Runtime,Bufferedreader,Explorer,Finder,我正在开发一个程序,这个程序需要能够查看Mac的“finder”或Windows的“File Explorer”是否已打开。我正试图通过使用一个。我现在得到的这段代码似乎确实适用于列出所有正在运行的进程 但问题是它不是当前运行的进程,这意味着它将列出在下午2点运行的进程,即使是凌晨3点或类似时间。这意味着,如果我要检查列出的进程是否包含Finder或File Explorer,它将返回true,无论是什么,因为它就像一个系统应用程序,一直在运行,不能像普通下载的.exe那样关闭,唯一的关闭方法是

我正在开发一个程序,这个程序需要能够查看Mac的“finder”或Windows的“File Explorer”是否已打开。我正试图通过使用一个。我现在得到的这段代码似乎确实适用于列出所有正在运行的进程

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

我想知道是否有办法修改我的代码,以便检查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,我使用
“getRuntime()”
行中的
“ps-now”
,对于Windows,我使用行
System.getenv(“windir”)+“\\system32\\\”+“tasklist.exe”

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


请在以下链接中找到:如果应用程序正在applescript中运行,请参阅answer的更新部分。

新的Java 9提供ProcessHandle API(执行本机调用):


我很感激你的意见,我要去看看。它像一个插件,像一个扩展库,还是我必须安装一些特定的东西,才能让Java“访问”Applescript?不,Applescript是Apple提供的一种脚本语言,更像Windows中的VBA脚本。如果在你的研究之后它看起来有用,请不要投票。谢谢
ProcessHandle.allProcesses().forEach(p -> System.out.println(p.pid()));