OS X上的Java DTrace桥接器

时间:2011-01-25 16:29:05

标签: java macos dtrace

我试图在OS X上的OS / Kernel级别上获取文件系统事件。 我必须遵循2条要求。第一个是在java中执行此操作,因为我正在开发的整个项目是用java编写的。第二个是我必须找出文档打开的时间。

对于Linux我使用了inotify-java,但是我在OS X上找不到一个好的等价物。而且JNA也没有提供有用的绑定。目前我通过频繁调用lsof程序来避免捕获事件。然而,这是一个糟糕的解决方案。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您可以在OSX上使用dtrace,但由于它需要root权限,因此您不希望将其放入系统的运行时。

在任何情况下,您都无法在纯Java中执行此操作(任何Java API都是一些较低级别C内省的包装器,如果您在内核范围内执行此操作,则需要完成作为根)。

如果您只想跟踪程序何时打开文件(而不是同一系统上的其他文件),那么您可以安装自己的安全管理器并实施checkRead()系列方法,这些方法可以为您提供关于访问何时发生的想法。

import java.io.*;

public class Demo {
  public static void main(String args[]) throws Exception {
    System.setSecurityManager(new Sniffer());
    File f = new File("/tmp/file");
    new FileInputStream(f);
  }
}
class Sniffer extends SecurityManager {
  public void checkRead(String name) {
    System.out.println("Opening " + name);
  }
}