FSEvents - 获取执行操作的进程的PID

时间:2014-09-25 23:47:21

标签: macos filesystems fsevents

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

1 个答案:

答案 0 :(得分:1)

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

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

Apple 一直在推动开发人员采用这种新框架,以支持以前的监控 API(例如利用 KAUTHMAC 的“传统”内核扩展;OpenBSM API),因此这是我可以推荐的唯一解决方案(超出 FSEvents)。

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