【问题标题】:How to monitor events from other processes如何监视来自其他进程的事件
【发布时间】:2014-01-21 14:24:11
【问题描述】:
我最终要做的是编写一个守护进程类型的进程来监视我有兴趣观看的另一个进程的启动/终止。
我知道 GCD 具有 proc 调度源类型,但您需要一个 PID,而且我不知道来自监控进程的信息。
那么是否有任何 OSX API 可以让您知道哪些进程已启动/停止? Activity Monitor 或“top”之类的程序是如何做到的?
【问题讨论】:
标签:
macos
process
grand-central-dispatch
launchd
【解决方案1】:
从他们的行为来看,Activity Monitor 和top 似乎很清楚,它们正在轮询,而不是响应异步事件。例如,您可以很容易地设计一个短期进程永远不会出现在top 或活动监视器中的情况。按理说,如果有一个事件驱动机制,系统工具就会使用它(至少 Activity Monitor,它是 OSX 特定的;top 可能过于 BSD 通用,但无论如何。)
dtrace 具有为 exec 事件触发的钩子,fs_usage 也具有记录 exec/spawn 事件的能力,但这两者都需要 root 权限,因此可能可以访问top 和活动监视器没有。
如果需要在用户空间中运行,您可以考虑使用与 kext 或类似的东西通信的用户空间应用程序。