Kennisbank › Macos Beheer › launchd : macOS
macos beheer starter 30 August 2026

launchd : macOS

launchd : le système init de macOS qui met tout en mouvement

launchd : le système init de macOS qui met tout en mouvement

`launchd` est le système init central de macOS, responsable du démarrage, de la gestion et de l'arrêt des systèmes et des tâches pendant et après le démarrage de l'ordinateur. C'est le moteur en coulisses qui veille à ce que les services, les applications et les processus en arrière-plan soient activés au bon moment. Le système est conçu pour être flexible, efficace et fiable, et remplace une série de mécanismes Unix plus anciens tels que `init`, `cron`, `inetd` et les scripts `rc`. launchd n'est pas simplement un outil ou un démon : c'est la pierre angulaire de la gestion moderne du système macOS.

Il a été introduit avec Mac OS X 10.4 Tiger, officiellement publié le 29 avril 2005. Avec l'arrivée de Tiger, Apple a apporté une série de nouvelles fonctionnalités, et launchd a été l'une des innovations techniques les plus profondes. Les sources le décrivent explicitement comme un « new startup daemon » et affirment qu'il a été conçu comme un remplacement des méthodes existantes pour démarrer des processus au démarrage ou à la demande. Grâce à cette intégration, Apple a pu créer un système plus uniforme, plus rapide et plus gérable, dans lequel la complexité de plusieurs initiateurs distincts (comme cron pour les tâches basées sur le temps et inetd pour les requêtes réseau) a été regroupée en une seule instance centrale.

Le développement de launchd a été dirigé par Dave Zarzycki, un ingénieur chez Apple qui a conçu et programmé le logiciel. Sa contribution a marqué une étape importante dans l'évolution de la gestion au niveau du noyau de macOS. La conception de Zarzycki était axée sur l'efficacité et la sécurité : les processus ne sont démarrés que lorsqu'ils sont réellement nécessaires, ce qui économise de l'énergie et des ressources système. Ce principe « à la demande » est une caractéristique essentielle de launchd. Contrairement aux systèmes init traditionnels qui chargent tous les démons au démarrage, launchd attend qu'une requête arrive – par exemple lorsqu'un utilisateur active un service particulier ou qu'une requête réseau entre.

Apple a annoncé publiquement Mac OS X 10.4 Tiger lors de la WWDC 2005, la conférence annuelle des développeurs. La keynote officielle a eu lieu le 6 juin 2005 à 10h00 au Moscone West, à San Francisco. Lors de cette présentation, l'introduction de launchd a notamment été soulignée comme faisant partie des nouveaux fondements techniques du système d'exploitation. Bien que la conférence fût destinée aux développeurs et aux intéressés, cette annonce a marqué le début d'une reconnaissance plus large de launchd au sein de la communauté technique. Le logiciel ne resterait pas seulement dans macOS, mais exercerait également une influence sur d'autres systèmes de type Unix, en particulier FreeBSD, qui adopterait ou s'inspirerait plus tard de certains éléments de launchd.

Un aspect important de launchd est qu'Apple a rendu public son code source. La version publique a été publiée sous la licence Apple Public Source License (APSL), liée à la sortie de Mac OS X 10.4. Cela a permis aux développeurs et aux chercheurs d'étudier, de modifier et de comprendre le fonctionnement du système. La disponibilité du code source a contribué à la transparence et à la confiance dans le système, et a permis à d'autres projets, comme FreeBSD, d'intégrer des éléments dans leurs propres systèmes init. La page wiki de FreeBSD confirme cette publication publique et mentionne à la fois le code source d'Apple et la licence, ce qui constitue une vérification externe importante de ce fait.

Sur le plan technique, launchd est responsable de la gestion des « jobs » – un terme général pour désigner les processus ou les tâches définis par le système ou les utilisateurs. Ces jobs sont décrits dans des fichiers XML avec l'extension `.plist` (property list). Chaque job possède un identifiant unique, comme `com.harry.backup`, et contient des paramètres tels que le moment où le processus doit démarrer, sous quel utilisateur il doit s'exécuter, s'il doit redémarrer automatiquement en cas de crash, et s'il doit réagir à certains événements.

Ces fichiers `.plist` sont stockés dans différents dossiers, selon le type de job et sa portée. Pour les tâches spécifiques à un utilisateur, ils sont stockés dans `~/Library/LaunchAgents/`. Pour les tâches à l'échelle du système, qui sont actives quel que soit l'utilisateur connecté, ils se trouvent dans `/Library/LaunchDaemons/` ou `/System/Library/LaunchDaemons/`. La distinction entre « Agents » et « Daemons » est importante : les Agents s'exécutent dans le contexte d'un utilisateur et ne démarrent que lorsque cet utilisateur est connecté, tandis que les Daemons fonctionnent comme des processus système et peuvent déjà être actifs pendant le démarrage.

Pour travailler avec launchd, on utilise la commande `launchctl` dans le Terminal. C'est l'interface principale pour gérer les jobs. Avec `launchctl list`, on obtient un aperçu de tous les jobs chargés. En combinant cette sortie avec `grep`, comme dans `launchctl list | grep com.harry`, un utilisateur peut rapidement rechercher ses propres tâches ou des tâches spécifiques. Les jobs peuvent être chargés ou désactivés manuellement avec `launchctl load` ou `launchctl unload`, suivis du chemin vers le fichier `.plist`. Un job peut également être démarré temporairement avec `launchctl start`, sans que le déclencheur sous-jacent (comme une heure ou un événement) ne se soit réellement produit.

Un exemple de fichier LaunchAgent ressemble à ceci :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.harry.backup</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/bin/backup-script.sh</string>
    </array>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>2</integer>
        <key>Minute</key>
        <integer>30</integer>
    </dict>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

Ce fichier fait en sorte qu'un script de sauvegarde soit exécuté chaque jour à 2h30, et démarre aussi directement lorsque la tâche est chargée. Il démontre comment launchd ne remplace pas seulement cron (via `StartCalendarInterval`), mais aussi les scripts rc (via `RunAtLoad`).

launchd n'est pas seulement responsable du démarrage des tâches, mais aussi de la gestion de leur cycle de vie. Il peut suivre si un processus tourne encore, le redémarrer en cas de crash (avec des réglages comme `KeepAlive`), et l'arrêter correctement lors de l'arrêt du système. Tout cela se fait d'une manière transparente pour l'utilisateur, mais cruciale pour la stabilité du système.

En outre, launchd prend en charge l'activation par socket : un démon n'a pas besoin de tourner en continu, mais peut être démarré dès qu'une connexion est établie vers un port ou un socket donné. Cela réduit considérablement l'utilisation de la mémoire et du CPU. Un exemple connu est le serveur Apache HTTP, qui peut être géré via launchd avec `apachectl start`, ce qui active finalement une tâche launchd sous le nom `org.apache.httpd`.

Dans le cadre de la sécurité du système, launchd est aussi intégré à l'architecture de sécurité plus moderne de macOS, y compris le sandboxing et la gestion des permissions. Bien que Docker Desktop sur macOS utilise launchd de manière limitée, il nécessite des configurations spécifiques qui ne sont possibles qu'avec un accès au niveau du système – un accès qui dépend en fin de compte des droits que launchd accorde à certains processus.

launchd est donc plus qu'un système d'init : c'est une solution intégrée pour l'automatisation, l'efficacité et la sécurité du système. Il fait partie de la lignée évolutive de macOS en tant que système d'exploitation moderne dérivé d'Unix, et reste à ce jour l'épine dorsale de l'administration système sur la plateforme desktop d'Apple.

← Retour à la base de connaissances
← Terug naar kennisbank