Java 获取当前正在运行的进程
我正在开发一个程序,这个程序需要能够查看Mac的“finder”或Windows的“File Explorer”是否已打开。我正试图通过使用一个。我现在得到的这段代码似乎确实适用于列出所有正在运行的进程 但问题是它不是当前运行的进程,这意味着它将列出在下午2点运行的进程,即使是凌晨3点或类似时间。这意味着,如果我要检查列出的进程是否包含Finder或File Explorer,它将返回true,无论是什么,因为它就像一个系统应用程序,一直在运行,不能像普通下载的.exe那样关闭,唯一的关闭方法是重新启动Finder或Explorer。这会使流程列表在最初更新时包含查找器或资源管理器。但通常当你以用户身份打开finder或explorer时,你并不是每次都重新启动应用程序,你只是打开explorer或finder,这不会触发一个新的运行时进程,这使得检查它是否刚刚打开有点困难 我想知道是否有办法修改我的代码,以便检查finder或explorer进程是否刚刚启动。它只需要在刚刚启动时触发,而不是在它已经运行时触发。 我在下面列出了我正在使用的代码Java 获取当前正在运行的进程,java,runtime,bufferedreader,explorer,finder,Java,Runtime,Bufferedreader,Explorer,Finder,我正在开发一个程序,这个程序需要能够查看Mac的“finder”或Windows的“File Explorer”是否已打开。我正试图通过使用一个。我现在得到的这段代码似乎确实适用于列出所有正在运行的进程 但问题是它不是当前运行的进程,这意味着它将列出在下午2点运行的进程,即使是凌晨3点或类似时间。这意味着,如果我要检查列出的进程是否包含Finder或File Explorer,它将返回true,无论是什么,因为它就像一个系统应用程序,一直在运行,不能像普通下载的.exe那样关闭,唯一的关闭方法是
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()));