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,它几乎可以满足您正在寻找的所有文件系统事件监控要求:

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

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

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

【讨论】:

以上是关于FSEvents - 获取执行操作的进程的 PID的主要内容,如果未能解决你的问题,请参考以下文章

C++ Windows - 通过可执行文件路径获取进程的 PID

获取子进程的pid

进程名称来自其在 linux 中的 pid

python 使用标准库根据进程名获取进程的pid

多任务-进程之PID

进程fork创建PID获取