Хобрук: Ваш путь к мастерству в программировании

Узнать код возврата привилегированного запуска справки через SMJobSubmit

Есть ли способ узнать код возврата или идентификатор процесса, который запускается, когда привилегированный вспомогательный инструмент устанавливается в качестве запуска и запускается через SMJobSubmit().

У меня есть приложение, которое для выполнения некоторых задач привилегированным образом использует API SMJobSubmit, как указано здесь .

Теперь, чтобы узнать, удались ли задачи или нет, мне придется сделать одно из следующих действий.

  1. Лучший вариант — получить код возврата запущенного исполняемого файла.
  2. Другим вариантом было бы создание канала между моим приложением и файлом launchd.
  3. Если два вышеуказанных варианта невозможны, мне придется прибегнуть к некоторому хаку, например, записать файл в папку /tmp и прочитать его из моего приложения.

Я предполагаю, что SMJobSubmit внутренне отправляет исполняемый файл со словарем launchdaemon в launchd, который затем отвечает за его выполнение. Итак, есть ли способ запросить launchd, чтобы узнать код возврата для запуска исполняемого файла с меткой «mylabel».


Ответы:


1

Невозможно сделать это напрямую.

SMJobSubmit — это простая оболочка для сложной задачи. Он также возвращается синхронно, несмотря на асинхронный запуск задачи. Таким образом, хотя он может выдать вам ошибку, если ему не удается отправить задание, если он успешно отправляет задание, которое не запускается, нет никакого способа узнать это.

Итак, вам придется явно написать некоторый код для связи вашего помощника с вашим приложением, чтобы сообщить, что оно запущено и работает.

Если вы уже создали какой-то механизм связи (сигналы, файлы, сокеты Unix или TCP, JSON-RPC через HTTP и т. д.), просто используйте его.

Если вы разрабатываете что-то с нуля, XPC может быть лучшим решением. Вы не можете использовать XPC для запуска вашего помощника (поскольку он привилегированный), но вы можете вручную создать соединение, зарегистрировав службу Mach и вызвав xpc_connection_create_mach_service.

19.09.2012
  • Спасибо. XPC кажется лучшим вариантом. 20.09.2012
  • Новые материалы

    Прогресс в технологии Трансформеров часть 3
    Многомасштабный управляющий сигнальный преобразователь для бесфазного синтеза движения (arXiv) Автор: Линтао Ван , Кун Ху , Лей Бай , Юй Дин , Ваньли Оуян , Чжиюн Ван . Аннотация:..

    Представляем поддержку компонентов Vue.js. Мгновенный HMR и многое другое.
    Хотя у FuseBox уже был плагин Vue, он был базовым и не имел многих функций, которые делали работу с Vue.js такой приятной. Однако с этим выпуском мы рады сообщить, что в FuseBox..

    Приключения в Javascript, часть 1
    Я продолжаю думать о том, чтобы писать больше, но чем больше я думаю об этом, тем меньше я это делаю. Итак, сегодня я перестал думать и начал писать. Отсюда можно только спускаться… В..

    Понимание дженериков в TypeScript: подробное руководство
    Введение TypeScript, строго типизированный надмножество JavaScript, хорошо известен своей способностью улучшать масштабируемость, удобочитаемость и ремонтопригодность приложений. Одной из..

    Учебные заметки JavaScript Object Oriented Labs
    Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

    Разбор строк запроса в vue.js
    Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

    Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
    «Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..