如何监视来自其他进程的事件

时间:2014-01-03 19:59:24

标签: macos process grand-central-dispatch launchd

我最终要做的是编写一个守护进程类型的进程,监视我有兴趣观看的另一个进程的开始/死亡。

我知道GCD有proc调度源类型,但你需要一个PID,我不知道监控过程中的信息。

那么是否有任何OSX API可以让您了解已启动/停止的进程? Activity Monitor或“top”等程序如何做到这一点?

1 个答案:

答案 0 :(得分:2)

从他们的行为来看,似乎非常清楚,Activity Monitor和top正在轮询,而不是响应异步事件。例如,您可以轻松设计一个短期过程永远不会出现在top或活动监视器中的情况。理所当然的是,如果存在事件驱动机制,系统工具将使用它(至少是Activity Monitor,这是OSX特定的;顶部可能太BSD一般,但无论如何。)

dtrace具有为exec事件触发的钩子,fs_usage也具有记录exec / spawn事件的能力,但这两者都需要root权限,因此可能有权访问top和活动监视器不会。

如果需要在用户空间中运行,则可以考虑使用与kext或类似内容进行通信的用户空间应用程序。