Использование launchd для загрузки и настройки расширения ядра в OS X - PullRequest
3 голосов
/ 10 мая 2011

Я пишу расширение ядра сети для фильтрации сокетов.Чтобы сделать его настраиваемым, пользовательская программа считывает файл конфигурации и передает информацию в kext через сокет PF_SYSTEM.

Если я хочу, чтобы при запуске системы фильтр сокетов был запущен и работал как можно скорее.Как бы я поставил хореографию запуска?

Моя текущая идея состоит в том, чтобы использовать launchd для запуска небольшой программы инициализации пользовательского пространства.Эта программа будет использовать kextload для запуска kext.После этого он будет читать конфигурационный файл и общаться с kext через сокет PF_SYSTEM.Выполнив свою работу, он затем быстро завершит работу.

Другой вариант будет иметь два элемента launchd, один для kext (с использованием kextload) и другой для программы чтения конфигурационных файлов пользовательского пространства.Это позволит избежать развилки, но в противном случае будет идентичным.В любом случае, launchd придется запускать быструю пользовательскую программу, не являющуюся демоном.

Однако, похоже, launchd ориентирован на запуск реальных демонов, а не на быстрые задачи, выполняющие свою работу и завершающиеся. Документ библиотеки разработчика гласит:

Важное замечание: Если ваш демон отключается слишком быстро после запуска, launchd может подумать, что он упал.Демоны, которые продолжают это поведение, могут быть приостановлены и больше не запускаться при поступлении будущих запросов.Чтобы избежать этого, не выключайте компьютер в течение 10 секунд после запуска.

Это создает у меня впечатление, что launchd - неправильный способ сделать это.Как мне организовать запуск?Вся моя идея движется в неправильном направлении?

(В качестве примечания я хочу дать пользователю возможность изменять параметры фильтрации также во время выполнения. Я полагаю, что это можно сделать, просто открыв новыйСоединение сокета PF_SYSTEM с kext всякий раз, когда требуются изменения.)

1 Ответ

2 голосов
/ 10 мая 2011

Я думаю, что предупреждение относится только к тем демонам, которые запускаются по требованию.

...