使用 launchd 在 OS X 中加载和配置内核扩展



我正在编写一个用于套接字过滤的网络内核扩展。为了使其可配置,userland 程序读取配置文件并通过PF_SYSTEM套接字将信息传递给 kext。

如果我想在系统启动时尽快启动并运行套接字过滤器,我将如何编排启动?

我目前的想法是使用 launchd 来启动一个小型的用户空间初始值设定项程序。该程序将使用kextload来启动 kext。之后,它将读取配置文件并通过PF_SYSTEM套接字与 kext 通信。完成工作后,它将迅速退出。

另一种选择是有两个launchd项,一个用于 kext(使用 kextload),另一个用于用户空间配置文件读取器。这将避免分叉,但否则将是相同的。无论哪种方式,launchd都必须运行一个快速的非守护程序用户空间程序。

但是,launchd似乎旨在启动实际的守护进程,而不是用于完成工作并退出的快速任务。开发人员库文档说:

重要提示:如果您的守护程序在启动后关闭得太快,launchd 可能会认为它已崩溃。继续此行为的守护程序可能会挂起,并且在将来的请求到达时不会再次启动。若要避免此行为,请在启动后至少 10 秒内不要关闭。

这给我的印象是launchd不是这样做的正确方法。我应该如何组织发布?我的整个想法是朝着错误的方向发展吗?

(作为旁注,我也想让用户在运行时更改过滤选项。我想这可以通过在需要更改时打开一个新的 PF_SYSTEM 套接字连接到 kext 来完成。

我认为该警告仅适用于按需启动的守护进程。

最新更新