FSEvents - 获取执行操作的进程的 PID
Posted
技术标签:
【中文标题】FSEvents - 获取执行操作的进程的 PID【英文标题】:FSEvents - get PID of the process that performed the operation 【发布时间】:2014-09-25 23:47:20 【问题描述】:在 OS X 上,使用FSEvents API,我可以轻松获取感兴趣路径的文件和目录通知(创建、删除等)。但是,我想知道是否有任何方法可以获取执行操作的进程的 PID 或名称(例如,创建文件)。我知道如果您实时监控文件系统,您可以获得此信息(请参阅:fs_logger),但我更喜欢使用FSEvents
,因为它允许您准确指定要监控和工作的路径以回调方式(很可能 CPU 密集度较低?)。
【问题讨论】:
【参考方案1】:Apple 有一个相对较新的 (macOS 10.15+) C
框架,称为 Endpoint Security,它几乎可以满足您正在寻找的所有文件系统事件监控要求:
pid
、uid
等(例如,用于文件创建的事件消息 (es_event_create_t) 包括带有流程详细信息的 es_process_t 字段)
不支持(还没有?)基于“感兴趣的路径”订阅文件系统事件,但可以根据源进程(例如es_mute_process())对事件进行“静音”(屏蔽)。与为您感兴趣的路径解析 所有 事件相比,这可能会有所改进。您始终可以为此向 Apple 提交功能请求。
Apple 一直在推动开发人员采用这个新框架一段时间,以支持以前的监控 API(例如利用 KAUTH
或 MAC
的“旧”内核扩展;OpenBSM
API),因此它是唯一的解决方案我可以推荐投资于未来(超越FSEvents
)。
有一些关于该主题的 WWDC 会议和示例项目:https://developer.apple.com/documentation/endpointsecurity/monitoring_system_events_with_endpoint_security
【讨论】:
以上是关于FSEvents - 获取执行操作的进程的 PID的主要内容,如果未能解决你的问题,请参考以下文章