我最终要做的是编写一个守护进程类型的进程,监视我有兴趣观看的另一个进程的开始/死亡。
我知道GCD有proc调度源类型,但你需要一个PID,我不知道监控过程中的信息。
那么是否有任何OSX API可以让您了解已启动/停止的进程? Activity Monitor或“top”等程序如何做到这一点?
答案 0 :(得分:2)
从他们的行为来看,似乎非常清楚,Activity Monitor和top
正在轮询,而不是响应异步事件。例如,您可以轻松设计一个短期过程永远不会出现在top
或活动监视器中的情况。理所当然的是,如果存在事件驱动机制,系统工具将使用它(至少是Activity Monitor,这是OSX特定的;顶部可能太BSD一般,但无论如何。)
dtrace
具有为exec事件触发的钩子,fs_usage
也具有记录exec / spawn事件的能力,但这两者都需要root权限,因此可能有权访问top
和活动监视器不会。
如果需要在用户空间中运行,则可以考虑使用与kext或类似内容进行通信的用户空间应用程序。