【发布时间】:2017-01-28 01:11:55
【问题描述】:
我正在开发一个程序,该程序需要能够查看 Mac 的“查找器”或 Windows 的“文件资源管理器”是否已打开。我试图通过使用tutorial 来做到这一点。我现在得到的这段代码似乎确实可以列出所有正在运行的进程。
但问题是它不是当前正在运行的进程,这意味着它会列出在下午 2 点运行的进程,即使是凌晨 3 点或类似的时间。这意味着如果我要检查列出的进程是否包含 Finder 或文件资源管理器,无论它是什么都将返回 true,因为它就像一个系统应用程序一直运行并且不能像常规下载的 .exe 那样关闭,关闭它的唯一方法是重新启动 finder 或 explorer。这最初确实会使用其中的 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 -few" 行,对于 Windows,我使用 System.getenv("windir") +"\\system32\\"+"tasklist.exe" 行
【问题讨论】:
标签: java runtime bufferedreader explorer finder