Launchd 1 что это за процесс на mac os

Обновлено: 06.07.2024

Начнем с истории. Жили были десяток программ для запуска процессов или программ. И тысячи скриптов к ним. Dave Zarzycki из Apple решил написать программу, которая отличалась бы от выше написанных и предлагала бы единый, стандартизированный интерфейс к любым программам запускающим автоматически системой и другие вкусности.

Вот и вся история. Теперь к самой программе.

Называется она Launchd. И она с открытом исходным кодом. Опен сорс.
Все процессы при старте системы(в Mac OS X) запускаются одним процессом launchd. При загрузке launchd вызывается ядром как первый процесс и дальше вся система стартует с помощью него. Так же Launchd следит за тем чтобы процесс был запущен. Если он вдруг упадет, Launchd ему поможет и поднимет его.

Для начала решим для чего нам нужно запустить что-либо при загрузке и когда это надо сделать.
Если вам нужно чтобы программа или процесс запустился при запуске системы и даже когда пользователь не вошел, то следует создать файл в папке /Library/LaunchDaemons. Если же нужно только когда вы вошли в систему то в папке /Library/LaunchAgents. Так же можно использовать и другие директории, но в данной статье мы не будем их касаться.

Давайте создадим Daemon для запуска php-fcgi процессов.
sudo mate /Library/LaunchDaemons/com.php-fcgi
И так что же нам туда писать?
Сначала уясним что Property List это Xml файл. И он должен быть валидным. Иначе ничего не будет работать.
В Textmate есть проверка валидности этих файлов, так что никаких пробелем возникнуть не должно.

В этом файле должны содержаться 3 обязательных ключа.
Label — уникальный идентификатор.

ProgramArguments — По сути это путь и параметры запускаемой программы.
Первая строка всегда путь к программе если не используется ключ Program.
Последующие строки будут параметрами. Каждый параметр и его значение лучше писать в разные строки.

OnDemand — Этот ключ говорит Launchd перезапустить процесс если он не запустился или упал. Так же устновив значение false говорит о том, что мы хотим чтобы процесс был запущен всегда.


Теперь обернем это все в стандартную запись присутсвующую во всех файлах подобного типа.

Сохраним. Теперь Launchctl — это программа интерфейс для Launchd.
С помощью нее мы сможем включать или выключать загрузку нашего кофигурационного файла.
Например следующая команда включит наш файл.
sudo launchctl load -w /Library/LaunchDaemons/com.php-fcgi.plist
А эта выключит.
sudo launchctl unload -w /Library/LaunchDaemons/com.php-fcgi.plist
И добавит ключ с параметром в наш файл.

Вобщем теперь у нас при загрузке должно запускаться 5 процессов php-cgi. Перезапускать их можно командой
sudo launchctl stop php
а так как у нас стоит OnDemand false, то это просто перезапустит процесс.

Программа Lingon

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

А теперь бонусы
Для многих копаться в командной строке лень или сложно. Для них есть вариант полегче. Это бесплатная программа Lingon.

PS.
Когда я разбирался с launchd я столкнулся с небольшой проблемой. При старте вызывалась программа spawn-php (да я знаю что это было глупо) и она вызывала php-cgi процессы. При тестировании все было хорошо. Но при загрузке ничего не происходило. Только с десятого раза получалось запустить процессы. Не знаю с чем это было связано, может это проблема именно в spawn-php, но она решилась способом, который я описал выше, т.е. вызовом напрямую процесса.

Launchd

В этот раз поговорим про автозапуск программ при загрузке Mac OS X. Статья рассчитана на продвинутых пользователей и тех кто стремится к этому уровню. В MacOS X имеется встроенное решение для выполнения автоматизации различных действий - Automator. Программа очень продвинутая в умелых руках, о которой можно писать целые книги, однако сегодня речь пойдет о другом.

Mac OS X, как и другие UNIX-подобные операционные системы, предоставляет просто потрясающие возможности по управлению процессами, демонами и запуском приложений по расписанию. К примеру, можно запустить собственный веб-сервер, выполнять скрипты или программы по расписанию, монтировать файловые системы и т.д. Применений на самом деле масса.

Не так давно, я писал про ограничение оборотов кулера на Mac, таким способом можно снизить шум на MacBook, Mac mini или iMac. Остался, правда, не раскрытым один достаточно важный вопрос, а именно, как автоматизировать запуск нашей утилиты, управляющей работой кулера? Согласитесь, не очень удобно всякий раз лезть в консоль и запускать её вручную. Так что, предлагаю на этом конкретном примере разобраться с Launchd и ознакомиться с сервисами и демонами в Mac OS X.

Services (сервисы) и Daemons (демоны) Mac OS X.

Для начала немного теории. «Сервисы» и «демоны» являются системными службами и обеспечивают работу системы, однако предназначены немного для разных целей, соответственно и работают тоже по-разному. Давайте разберемся, что конкретно делают эти «сервисы» и «демоны» и в чем разница между ними?

Начнем с того, что делают они практически всё, начиная с запуска WEB-сервера и заканчивая монтированием файловых систем и запуском графической оболочки. Разница же между ними в том, что «сервисы», как правило, запускаются после загрузки графического интерфейса и предназначены, в основном, для запуска графических приложений; «демоны» могут запускаться до загрузки графики, в фоновом режиме и предназначены запуска bash/shell скриптов, серверов (служб) и всевозможных консольных утилит.

Сервисы представляют из себя конфигурационные XML файлы с расширением .plist, которые во время загрузки Mac OS обрабатываются и запускаются фоновым процессом launchd. Файлы .plist находятся в директориях LaunchAgents или LaunchDaemons (в зависимости от их предназначения). В системе имеется несколько директорий LaunchAgents и LaunchDaemons. Это ключевой момент в понимании того как происходит работа системы и его стоит рассмотреть подробнее:

Как вы уже догадались, директории LaunchAgents используются для запуска «сервисов», а LaunchDaemons - для запуска «демонов».

Файлы конфигурации .plist

Как уже говорилось, все конфигурационные .plist-файлы запускаются фоновым процессом launchd во время загрузки OS X.

Сами по себе .plist-файлы всего лишь «сценарии», набор неких правил, для запуска других приложений и не являются самостоятельными программами, однако отличаются гибкостью и функциональностью в настройке. Пора рассмотреть пример, свой файл сценария я назвал my.fancontrol.plist:

Пока вообще ничего не понятно, ну это мы сейчас поправим. Напомню задачу - необходимо при запуске Mac OS X, до входа пользователя в систему (а то какая-то несправедливость получится) в терминале выполнить команду:

Тем самым мы запускаем утилиту smc и передаем ей два параметра - указываем кулер и выставляем ему максимальную частоту оборотов. Выше вы видите получившийся код нашего сценария со стандартной шапкой формата XML (для всех служб и демонов она одинакова).

Что я тут понаписал? Итак, основные ключи и параметры .plist-файла:

Ключ «Label» задаёт название сервиса, которое будет отображаться в Мониторинге системы или логах утилиты Консоль.

Ключ «ProgramArguments» содержит массив, в котором указаны путь к исполняемому файлу (или bash/shell скрипту) и параметры его запуска. Заметьте, что каждый параметр необходимо записывать отдельно.

Ключ «RunAtLoad» указывает системе, что правило нужно исполнить при загрузке ОС. Есть еще много всяких ключей и параметров, например для запуска приложения по расписанию или через определенные промежутки времени. Этой статьёй я даю лишь толчок для понимания дальнейшего изучения Launchd в OS X и не ставлю целью создать полноценное руководство.

Активировать или дезактивировать работающий сценарии можно выполнив команды:

Яндекс.Дзен и узнавайте первыми о новых материалах, опубликованных на сайте.

Если считаете статью полезной,
не ленитесь ставить лайки и делиться с друзьями.

Куда подевалось место на моём маке? Самый простой способ очистки диска в macOS Sierra. Восстанавливаем данные с диска на Mac из Single User mode iPad mini представят 23 октября При запуске MacBook горит яблоко и ничего не происходит Установка macOS Catalina на неподдерживаемые «маки» Как я вернул к жизни утонувший iPhone 4S, сделав его инвалидом. Первый опыт пайки SMD компонентов.

Комментариев: 5

"launchctl: no plist was returned for: /Library/LaunchDaemons/smc 21.06.14.plist

nothing found to load"

Скорее всего дело в пробеле, который надо экранировать обратным слешем.

Доброго времени суток. Не могу понять как создать сам файл . plist. Не подскажите?

Хотелось бы реализовать нечто подобное для сценария создания RAM-диска при запуске ОС и перенести на него некоторые кеши. Не поможете решить эту задачу?

Как поймать и удалить скрытые LaunchDaemons и LaunchAgents на Mac

Вы когда-нибудь испытывали эти разочарования на вашем Mac?

  • Приложение появляется в строке меню, но не в элементах входа в систему.
  • Safari перенаправляет на рекламные сайты или изменяет свою домашнюю страницу без вашего разрешения.
  • Неизвестные процессы потребляют процессор в фоновом режиме .

К сожалению, при таких неожиданных событиях удаление приложения из элементов входа в систему недостаточно для решения проблемы. Существует много скрытых компонентов, и Apple не предоставляет их в типичном интерфейсе macOS.

Мы покажем, как вы можете отслеживать и принимать меры против этих скрытых элементов входа в систему для устранения уникальных проблем Mac.

Понимание процедуры запуска macOS

Когда вы нажимаете кнопку питания, ваш Mac загружается с серией знакомых событий:

  • Вы слышите слышимый звук при запуске (новые Mac не делают этого).
  • Логотип Apple появляется вместе с индикатором выполнения.
  • Вы увидите экран входа в систему после его завершения (или рабочий стол, если у вас включен автоматический вход в систему).

За кулисами macOS запускает процесс запуска . Это отвечает за запуск, остановку и управление всеми другими процессами, включая системные и отдельные учетные записи пользователей. Процесс высоко оптимизирован и занимает всего несколько минут.

Чтобы проверить это самостоятельно, откройте приложение « Монитор активности» и выберите « Просмотр»> «Все процессы» . Вверху вы увидите два основных процесса: kernel_task и launchd , с их идентификаторами процессов (PID) как 0 и 1 .

Это показывает, что launchd является основным родительским процессом при запуске системы. Это также последний процесс, который необходимо завершить при выключении системы.

процесс запуска в мониторе активности

Основная обязанность launchd — запускать другие процессы или задания по расписанию или по требованию. Они бывают двух типов: LaunchDaemons и LaunchAgents .

Что такое LaunchDaemons и LaunchAgents?

LaunchDaemons обычно запускается как root, независимо от того, вошел ли пользователь в систему или нет. Они не могут отображать информацию с помощью графического интерфейса пользователя и влияют на всю систему.

Например, процесс определения местоположения обнаруживает географическое местоположение Mac, а процесс bluetoothd управляет Bluetooth. Список демонов живет в следующих локациях:

  • /System/Library/LaunchDaemons для собственных процессов macOS
  • /Library/LaunchDaemons для установленных сторонних приложений

Папка LaunchDaemons Mac

Агенты запуска запускаются, когда пользователь входит в систему. В отличие от демонов, они могут получать доступ к пользовательскому интерфейсу и отображать информацию. Например, приложение календаря может отслеживать учетную запись пользователя в календаре на наличие событий и уведомлять вас, когда событие происходит. Список агентов проживает в следующих местах:

    /Library/LaunchAgents для всех учетных записей пользователей

Папка LaunchAgents Mac

Перед входом в систему launchd запускает службы и другие компоненты, указанные в файлах PLIST, из папки LaunchDaemons. После входа в систему launchd запустит службы и компоненты, определенные в файлах PLIST, из папок LaunchAgents. Те, что находятся в / System / Library, являются частью macOS и защищены системой защиты целостности системы.

Файлы предпочтений соответствуют стандартной системе именования обратных доменов. Он начинается с названия компании, за которым следует идентификатор приложения, и заканчивается расширением файла списка свойств (.PLIST). Например, at.obdev.LittleSnitchHelper.plist является вспомогательным файлом для приложения LittleSnitch.

Системная папка LaunchAgents Mac

Как поймать LaunchDaemons и LaunchAgents

В отличие от папок в системной папке, общие папки LaunchDaemon и LaunchAgent открыты как для легитимных, так и для нелегитимных приложений. Вы можете отслеживать эти папки автоматически с помощью действий с папками.

Откройте приложение AppleScript Editor, выполнив поиск в Spotlight. Нажмите « Настройки» и выберите « Основные»> «Показать сценарий» в строке меню .

включить скрипт меню в строке меню Mac

Щелкните значок « Меню сценариев» и выберите « Действия с папками»> «Включить действия с папками» . Затем выберите « Присоединить скрипт к папке» в этом же меню.

Прикрепить скрипт к папке в папке действий по настройке Mac

Откроется диалоговое окно. Отсюда выберите добавить — оповещение о новом элементе .

выбрать новый пункт оповещения Mac

Нажмите OK, чтобы открыть окно Finder. Теперь выберите пользовательскую папку LaunchDaemon (указанную выше) и нажмите « Выбрать» .

выберите папку launchdaemon для папки действий Mac

Повторите описанную выше процедуру для каждой папки LaunchAgents.

Когда закончите, откройте Finder и нажмите « Перейти»> «Перейти к папке» или нажмите Shift + Cmd + G, чтобы открыть диалоговое окно навигации. Введите

/ Library / LaunchAgents и нажмите Go .

Finder Перейти к папке LaunchAgents

Щелкните правой кнопкой мыши папку LaunchAgents и выберите « Службы»> «Настройка действий с папками», чтобы привязать сценарий оповещения о новом элементе к каждой папке.

выберите папку с действиями настройки, чтобы связать скрипт Mac

настройка действий папки из диалогового окна Mac

В появившемся диалоговом окне вы увидите список папок в левом столбце и скрипт в правом столбце. Если вы не видите никаких скриптов, нажмите кнопку « Плюс» и добавьте новый элемент alert.scpt .

Рассмотрите возможность мониторинга этих папок с помощью приложений

Если вам нужны дополнительные параметры для оповещений в этих папках, попробуйте несколько сторонних инструментов.

EtreCheck — это диагностический инструмент macOS, который отображает состояние загрузки сторонних LaunchDaemons и LaunchAgents, помимо прочего. Когда вы запускаете EtreCheck, он собирает различную информацию о вашем Mac и представьте его в удобном для чтения отчете. Он также имеет дополнительные параметры справки при работе с рекламным ПО, подозрительными демонами и агентами, неподписанными файлами и многим другим.

Откройте EtreCheck и нажмите « Сканировать» . Это займет несколько минут, и как только это будет сделано, вы увидите полную сводку вашего компьютера. Это включает в себя основные и второстепенные проблемы, спецификации оборудования, проблемы совместимости программного обеспечения, состояние LaunchDaemons и LaunchAgents и многое другое.

Приложение бесплатно для первых пяти отчетов, а затем требует покупки в приложении за 10 долларов США для дальнейшего использования.

etrecheck создание отчета Mac

Lingon X — это еще один инструмент, который позволяет запускать приложение, сценарий или автоматически запускать команду по расписанию. Он также может отслеживать все папки LaunchDaemons и LauchAgents в фоновом режиме и показывать уведомление, когда что-то меняется. Вы можете увидеть все элементы графически и настроить их по мере необходимости.

Этот инструмент можно бесплатно попробовать и стоит $ 15 за полную лицензию.

Lingon X интерфейс Mac

Как удалить LaunchDaemons и LaunchAgents

Публичные папки / Library / LaunchAgents и / Library / LaunchDaemons уязвимы как для легитимных, так и для нелегитимных приложений. Законное приложение может использовать его для маркетинга, в то время как нелегальные приложения могут использовать их для кражи данных и заражения системы.

Чтобы рекламное и вредоносное ПО были успешными, они должны сохраняться в каждом сеансе пользователя. Для этого авторы вредоносных и рекламных программ создают вредоносный код и помещают его в папку LaunchAgent или LaunchDaemon. Каждый раз, когда ваш Mac запускается, launchd гарантирует, что вредоносный код запускается автоматически. К счастью, приложения безопасности могут помочь защитить от этого.

Используйте Mac Security Apps

Левая панель содержит категории постоянных приложений, с именами и кратким описанием. Нажмите на любую группу, чтобы отобразить элементы в правой панели. Например, нажмите Launch Items на левой панели, чтобы просмотреть все LaunchAgents и LaunchDaemons.

пользовательский интерфейс knockknock Mac

Каждая строка дает подробную информацию о приложении. Сюда входит состояние со знаком или без знака, путь к файлу и результаты антивирусной проверки из VirusTotal.

BlockBlock — еще одно бесплатное приложение для обеспечения безопасности от Objective-See , которое постоянно отслеживает места сохранения. Приложение работает в фоновом режиме и показывает предупреждение, когда вредоносная программа добавляет постоянный компонент в macOS.

Оповещение о блокировке блока

Однако не все сторонние PLIST-файлы являются вредоносными. Они могут прийти откуда угодно, в том числе:

  • Компоненты установленных приложений
  • Остатки старых приложений, которые вы больше не используете
  • Остатки от предыдущих обновлений macOS
  • Миграция Помощник остатки
  • Щенки (потенциально нежелательные программы), рекламное ПО и вредоносное ПО.

Вы не хотите удалять какие-либо компоненты установленных приложений. Однако совершенно безопасно удалить остатки старых приложений и остатки от предыдущих обновлений macOS (если только вы не хотите продолжать использовать эти приложения).

Для этого нет уникального процесса удаления — просто удалите файл PLIST и перезагрузите компьютер. Или вы можете вырезать и вставить его на рабочий стол, чтобы иметь копию и быть в безопасности. Не удаляйте элементы из папок System LaunchAgents или LaunchDaemons , так как они необходимы для бесперебойной работы macOS.

Adware и щенки общеизвестно сложно решать. Если у вас есть сомнения, запустите бесплатную версию Malwarebytes и рассмотрите возможность обновления до Malwarebytes Premium, если вам нужна дополнительная защита.

Malwarebytes бесплатный Mac

Будьте осторожны с угрозами запуска на Mac

Если вы выполните эти шаги, вы заранее узнаете о новых угрозах и сможете решить любые проблемы. Популярность рекламы и щенков растет, и постоянно появляются новые варианты вредоносных программ.

Хитрость заключается в том, чтобы отслеживать эти папки и проводить частые диагностические проверки. Если вы сомневаетесь, всегда гуглите потенциально вредоносные имена процессов. Но если вы избежите ошибок, которые заражают ваш Mac вредоносным ПО заражения вашего Mac вредоносным ПО заражения вашего Mac вредоносным ПО , вам не нужно беспокоиться.


Эта статья — уже третья из моего небольшого цикла о macOS. В первой («Обвес macOS») мы изучали скрытые настройки и собирали полезный софт, во второй («Кунг-фу для маковода») прошлись по большинству уникальных утилит командной строки. В ней я уже касался launchctl, но лишь вкратце. Что эта штука достойна отдельной статьи, было ясно сразу.

Благодаря гибкости настроек launchd, этот сервис заменил в macOS целый список более старых систем, которые пришли из Unix. Он управляет процессом загрузки ОС и сервисов (вместо init), он реагирует на подключения по сети (вместо inetd), он же запускает скрипты по времени (вместо cron) и при разных условиях. Мы воспользуемся этими богатыми возможностями для настройки всякой автоматизации: запуска скриптов по времени, срабатывания при помещении файла в папку, при изменении файла и при подключении внешнего носителя.

Я буду писать именно про launchctl, поскольку работаю в macOS, но если ты предпочитаешь Linux, то можешь позаимствовать идеи и скрипты, которые мы будем писать, и проделать все то же самое при помощи systemd. Эта система похожа на launchd и есть во многих современных дистрибутивах. Однако ее настройки в корне отличаются, и параллельно разбирать еще и их я не возьмусь.

Агенты и демоны

Файлы с правилами — это XML с расширением .plist. Внутри содержатся инструкции, которые указывают launchd, что и когда запускать. Эти файлы разложены в системе по пяти папкам:

Отличие агентов от демонов довольно тонкое: демоны — это процессы, которые запускаются сразу после загрузки машины, а агенты могут работать только после логина в систему (соответственно, демонов для конкретного пользователя не бывает). К тому же демоны после активирования работают непрерывно, а агенты обычно срабатывают при определенных условиях.

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

Для создания конфигурационных файлов launchd есть пара графических оболочек — LaunchControl и Lingon (обе стоят по десять долларов). Они слегка облегчают дело, но можно обойтись и без них.

Простой конфиг: запуск по времени

Начнем с самого простого — запуска чего-нибудь в определенное время. Вот как выглядит один из самых простых вариантов конфига.

Несмотря на развесистый вид, структура здесь довольно несложная. Внутри основного словаря ( <dict> ) идут ключи и следом — параметры к ним. Иногда это строки, иногда массивы, иногда вложенные словари.

Заменяй слово «название» на какое-нибудь название (обычно «com.домен.имя» — я, например, назвал тестовый агент com.and.launchtest ), укажи путь к исполняемому файлу в качестве первого параметра ProgramArguments , а затем задай, во сколько и по каким дням запускать.

Конфиги удобно редактировать в Xcode

Конфиги удобно редактировать в Xcode

В примере выставлено время 1:30 каждую субботу. Если ты снесешь ключ Day , скрипт начнет запускаться в половине второго каждую ночь, а если уберешь и Hour , то каждые полчаса. Думаю, ты понял идею. Аналогичная запись в crontab выглядела бы как

Если команда, которую ты запускаешь, принимает аргументы, то их нужно перечислить после пути, добавив дополнительные поля <string> . Например:

Когда все будет готово, сохраняем файл в

/Library/LaunchAgents/ . Хорошей идеей будет сразу прописать в названии условия запуска, чтобы потом было легче ориентироваться. Например, мой тестовый конфиг я сохранил как com.and.launchtest.StartInterval.plist .

Тонкости активации

К сожалению, обратная сторона гибкости — это развесистость настроек. Даже включать и выключать конфиги launchd можно несколькими способами. Вот старый и наиболее простой. Для загрузки пиши:

Ключ -w заодно включает флаг enabled, что экономит нам один шаг ( launchctl enable ) и сразу активирует конфиг. Помни, что после загрузки компьютера и входа в систему все агенты, лежащие в соответствующих папках, будут загружены автоматически. Именно поэтому при выгрузке удобно тоже добавлять -w — тогда launchctl запомнит, что конфиг неактивен.

После того как что-то меняешь в конфиге, его нужно выгружать и загружать заново.

Можешь спокойно пользоваться этими командами, однако если откроешь man, то узнаешь, что они считаются устаревшими и поддерживаются лишь для совместимости. Более правильный способ — использовать команды bootstrap и bootout . Они требуют указывать, помимо пути к файлу конфигурации, domain-target, который состоит из домена и UID пользователя. Целиком команды будут выглядеть вот так:

Узнать свой UID можешь командой id -u . Первый пользователь компьютера обычно записан под номером 502.

Другая команда, которую хорошо помнить, — это list . Чтобы проверить, какие из твоих конфигов загружены, можешь написать:



Опять же — существует более современный, более продвинутый и, конечно, более замороченный метод:

На выходе будет куда больше информации, чем при запросе списка. Но опять же, использовать print совершенно не обязательно. В ответ на вопрос о том, когда устаревшие команды перестанут работать, кто-то из разработчиков ответил на форуме, что на старый синтаксис слишком много завязано, чтобы убирать его.

Продолжение доступно только участникам

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Читайте также: