Launchd

launchd: macOSのサービス管理フレームワーク



launchdは、macOSで採用されているオープンソースのサービス管理フレームワークです。デーモン、アプリケーション、プロセス、スクリプトの起動、停止、管理を一元的に行うことができます。AppleのDave Zarzycki氏によって開発され、Mac OS X Tiger(v10.4)で導入されました。Apache Licenseの下で公開されており、他のシステムへの移植も可能です。

launchdの役割



launchdは、従来のinit、rc、inetd、atd、crondといった様々なデーモンを置き換えることを目的としています。これらのサービスを一つのプログラムに統合することで、システムの起動時間を大幅に短縮し、リソースの効率的な利用を実現します。

コンポーネント



launchdシステムは、主に`launchd`と`launchctl`という2つのプログラムで構成されています。

launchd: システムレベルとユーザーレベルの両方でデーモンを管理します。必要に応じてデーモンを起動したり、デーモンが正常に動作し続けているかを監視したりします。macOSでは、PID 1としてinitの代わりにブート時のシステム開始を担います。
launchctl: デーモンのロードとアンロード、ジョブの開始と停止、システムリソースの使用状況の取得、環境設定などに使用されるコマンドラインアプリケーションです。

設定ファイルは、サービスの設定パラメータを定義するプロパティリスト(plist)ファイルで、`LaunchAgents`と`LaunchDaemons`というディレクトリに保存されています。

launchdの動作



launchdの主なタスクは、システムの起動とサービスのロードと維持です。

1. Open Firmware(PowerPC Macの場合)がハードウェアを初期化し、BootXをロードします。
2. BootXがカーネルをロードし、必要なカーネル機能拡張をロードします。
3. カーネルがlaunchdをロードします。
4. launchdが`/etc/rc`を実行し、`LaunchDaemons`と`LaunchAgents`ディレクトリ内のplistファイルを読み込み、サービスを起動します。ログインウインドウもここで起動されます。

`LaunchDaemons`にはroot権限で実行されるデーモンが、`LaunchAgents`にはユーザー権限で実行されるエージェントアプリケーションが登録されています。

launchdは、SystemStarterとは異なり、すべてのデーモンをブート時に起動するわけではありません。デーモンはオンデマンドで起動され、必要な時にのみリソースを使用します。これにより、システムの起動時間を短縮し、リソースの効率的な利用を実現します。`OnDemand`キーがplistに設定されている場合、デーモンは実際にロードされるのではなく、launchdがポートをリッスンし、必要に応じてデーモンを起動・終了します。

また、デーモンの動作を監視し、必要に応じて再起動することで、システムの安定性を維持します。デーモンがバックグラウンドで実行されている場合、launchdはその追跡を失い、プロセスを再起動しようとするため、デーモンは勝手にforkやデーモン化をしないように設計する必要があります。

launchctlの利用



launchctlは、コマンドラインからデーモンを管理するためのツールです。標準入力、対話モード、設定ファイルを利用して操作できます。スーパーユーザー権限で実行することで、システム全体の変更も可能です。

プロパティリスト (plist)



プロパティリストは、プログラムの設定を記述するためのApple独自の形式です。launchdは、plistファイルに基づいてプログラムの実行方法を決定します。

plistには、以下のようなキーが含まれます。

`Label`: ジョブの一意な識別子
`ProgramArguments`: 実行するプログラムのパスと引数
`RunAtLoad`: システム起動時にジョブをロードするかどうか
`KeepAlive`: ジョブを常に実行し続けるかどうか
* `OnDemand`: ジョブを必要に応じて起動するかどうか

macOS以外での利用



launchdは、2005年にGoogle Summer of Codeの一環としてFreeBSDに移植されました。Ubuntuも一時的に導入を検討しましたが、ライセンスの問題で断念されました。しかし、2006年にApache Licenseで再ライセンスされたことで、他のオープンソース開発者も採用しやすくなりました。

まとめ



launchdは、macOSの基盤を支える重要なサービス管理フレームワークです。その効率的な動作により、システムの起動時間短縮、リソースの効率的な利用、安定性の向上に貢献しています。また、オープンソースとして公開されていることで、他のシステムへの移植や拡張も可能です。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。