13

在 OS X 上,使用FSEvents API,我可以轻松获取感兴趣路径的文件和目录通知(创建、删除等)。但是,我想知道是否有任何方法可以获取执行操作的进程的 PID 或名称(例如创建文件)。我知道如果您实时监控文件系统,您可以获得此信息(请参阅:fs_logger),但我更喜欢使用FSEvents它,因为它允许您准确指定要监控的路径并以回调方式工作(这么有可能减少 CPU 密集型?)。

4

1 回答 1

1

Apple 有一个相对较新的 (macOS 10.15+)C框架,称为Endpoint Security,它几乎可以满足您正在寻找的所有文件系统事件监控要求:

  • 高效/事件驱动模型(es_new_client()
  • 粒度事件类型订阅模型 ( es_subscribe() )
  • 丰富的事件上下文,包括pid,uid等等(例如,用于文件创建的事件消息 ( es_event_create_t ) 包括一个带有进程详细信息的es_process_t字段)
  • 不支持(还没有?)基于“感兴趣的路径”订阅文件系统事件,但可以基于源进程(例如es_mute_process())“静音”(屏蔽)事件。这可能会比为您感兴趣的路径解析所有事件提供改进。您始终可以为此向 Apple 提交功能请求。

一段时间以来,Apple 一直在推动开发人员采用这个新框架,以支持以前的监控 API(例如利用KAUTHMAC; OpenBSMAPI 的“遗留”内核扩展),因此这是我可以推荐的唯一解决方案,我可以建议在未来投资(超越FSEvents)。

有一些关于该主题的 WWDC 会议和示例项目:https ://developer.apple.com/documentation/endpointsecurity/monitoring_system_events_with_endpoint_security

于 2021-01-23T19:08:34.337 回答