| 原作者 | デイブ・ザージッキ |
|---|---|
| 開発者 | アップル社 |
| 初回リリース | 2005年4月29日 |
| 書かれた | C |
| オペレーティング·システム | macOS、FreeBSD、iOS、watchOS |
| タイプ | 初期化デーモン |
| ライセンス | プロプライエタリソフトウェア(以前はAPSL、後にApache License 2.0) |
| Webサイト | opensource.apple.com/tarballs/launchd/ |
launchd は、 BSD スタイルのinitとSystemStarter を置き換えるために、macOSの一部としてApple 社によって作成されたinitおよびオペレーティング システム サービス管理 デーモンです。 launchd をFreeBSDおよび派生システムに移植する取り組みが行われてきました。
コンポーネント
launchd システムには、launchd と launchctl という 2 つの主要なプログラムがあります。
launchd は、システムレベルとユーザーレベルの両方でデーモンを管理します。xinetd と同様に、launchd は要求に応じてデーモンを起動できます。watchdogd と同様に、launchd はデーモンを監視して、デーモンが継続的に実行されているかどうかを確認できます。また、launchd は macOS で init をPID 1 として置き換え、その結果、起動時にシステムを起動する役割を担っています。
構成ファイルは、launchd によって実行されるサービスのパラメータを定義します。ライブラリ フォルダの LaunchAgents および LaunchDaemons サブディレクトリに保存されるプロパティ リストベースのファイルには、設定可能な約 30 個の異なるキーがあります。launchd 自体はこれらの構成ファイルを認識しておらず、読み取ることもできません。これは「launchctl」の役割です。
launchctl は、 IPC を使用して launchd と通信し、 launchd ジョブを記述するために使用されるプロパティ リストファイルを解析し、launchd が理解できる特殊な辞書プロトコルを使用してそれらをシリアル化するコマンド ライン アプリケーションです。launchctl は、デーモンのロードとアンロード、launchd によって制御されるジョブの開始と停止、launchd とその子プロセスのシステム使用率統計の取得、環境設定の設定に使用できます。
起動
launchd には 2 つの主なタスクがあります。1 つ目はシステムを起動すること、2 つ目はサービスをロードして維持することです。
以下は、 PowerPC Macでの Mac OS X Tiger システムの起動を簡略化した図です( Intel Mac では、EFI がOpen Firmwareに代わり、BootXboot.efiに代わります)。
- Open Firmware が起動し、ハードウェアを初期化してから、BootX をロードします。
- BootX はカーネルをロードし、風車カーソルを回転させ、必要なカーネル拡張(kext) をロードします。
- カーネルは launchd をロードします。
- launchd は、と
/etc/rcをスキャンするさまざまなスクリプトを実行し、必要に応じて plist 上で launchctl を呼び出し、その後、ログイン ウィンドウを起動します。/System/Library/LaunchDaemons/Library/LaunchDaemons
ステップ 4 では、起動スクリプトがいくつかの異なるディレクトリをスキャンして、実行するジョブを探します。スキャンされるディレクトリは 2 つあります。
- LaunchDaemons ディレクトリには、ルートとして実行される項目 (通常はバックグラウンド プロセス) が含まれています。
- LaunchAgents ディレクトリには、エージェント アプリケーションと呼ばれるジョブが含まれており、ユーザーとして、またはユーザーランドのコンテキストで実行されます。これらはスクリプトやその他のフォアグラウンド項目である場合があり、ユーザー インターフェイスを含めることもできます。
これらのディレクトリはすべて、Mac OS X の一般的なライブラリ ディレクトリに保存されます。
launchd は、実際には起動時にすべてのデーモンを起動しない可能性があるという点で、SystemStarter と大きく異なります。launchd の鍵となるのは、xinetd と同様に、オンデマンド デーモンの起動という考え方です。起動時に launchctl がジョブ plist をスキャンすると、launchd に、それらのジョブによって要求されたすべてのポートを予約してリッスンするように要求します。plist で "OnDemand" キーによってそのように指定されている場合、デーモンは実際にはその時点ではロードされません。代わりに、launchd はポートをリッスンし、必要なときにデーモンを起動し、不要になったときにシャットダウンします。デーモンがロードされた後、launchd はデーモンを追跡し、必要に応じて実行されていることを確認します。この点では、launchd は watchdogd に似ており、プロセスが独自にフォークまたはデーモン化を試みないという watchdogd の要件を共有しています。プロセスがバックグラウンドに入ると、launchd はそれを追跡できなくなり、再起動を試みます。
その結果、Mac OS X Tiger は以前のリリースよりも起動がはるかに高速になりました。システムは実行するデーモンを登録するだけでよく、実際に必要になるまでデーモンを起動しません。実際、起動時に表示される進行状況バーは単なるプラシーボ アプリケーション (WaitingForLoginWindow [1]という名前) であり、時間の経過以外は何も表示しません。
launchd の起動中に管理するのが最も難しいのは依存関係です。SystemStarter には、スタートアップ項目の plist にある "Uses"、"Requires"、"Provides" キーを使用する非常に単純な依存関係システムがありました。Tiger で launchd の依存関係を作成する場合、2 つの主な戦略があります。IPCを使用すると、デーモンが相互に対話して依存関係を解決することができます。また、デーモンがファイルやパスの変更を監視できます。IPC の使用は SystemStarter のキーよりもはるかに微妙で、開発者の作業が増えますが、よりクリーンで迅速な起動につながる可能性があります[要出典] 。SystemStarter はOS X Mountain Lionまでサポートされていましたが、 OS X Yosemiteで削除されました。
起動ctl
launchd では、サービスの制御はlaunchctlアプリケーション内で集中化されます。
launchctl は、コマンドラインや標準入力からコマンドを受け取ったり、対話モードで動作したりできます。スーパーユーザー権限があれば、launchctl を使用してグローバル スケールで変更を加えることができます。launchctl コマンドのセットは、 /etc/launchd.confに保存すると永続化されます。(ユーザーごとの~/.launchd.confファイルが検討されているようですが、macOS の既存のバージョンではサポートされていません。[2] )
launchctl は、 Mach固有の IPC メカニズムを介して launchd と通信します。
物件一覧
プロパティリスト(plist) は、launchd がプログラムの構成に使用するファイルの種類です。launchd がフォルダーをスキャンするか、ジョブが launchctl で送信されると、プログラムの実行方法を記述した plist ファイルを読み取ります。
よく使われるキーのリストを以下に示します。特に記載がない限り、すべてのキーはオプションです。完全なリストについては、Appleのマニュアルページを参照してくださいlaunchd.plist。[3]
ソケットアクティベーションプロトコル
ソケットの下の各キーの名前は、ジョブの実行時にジョブの環境に配置され、そのソケットのファイル記述子はその環境変数で利用可能になります。これは、ジョブ構成内のソケット定義の名前がアプリケーションにハードコードされている点で、systemd のソケットアクティベーションとは異なります。このプロトコルは柔軟性に欠けますが、systemd のようにデーモンが開始ファイル記述子をハードコードする必要はありません (2014 年現在、3 です)。[4]
歴史
このソフトウェアは、 AppleのDave Zarzyckiによって設計およびコーディングされました。同社は、OS X環境で以下のすべてを置き換えることを計画していました。
– そして、それらのほとんどは、Mac OS X v10.4 (Tiger)で launchd が導入されたときに置き換えられました。
2005年、R. Tyler CroyはGoogle Summer of Codeプロジェクトの一環としてlaunchdをFreeBSDに移植した。PID 1として実行することはできず(セッション初期化のみ)、そのプラットフォームでは一般的に使用されなかった。[5]
2006年、Ubuntu Linuxディストリビューションはlaunchdの使用を検討した。ソースコードがApple Public Source Licenseの対象であったため、このオプションは却下された。これは「避けられないライセンス問題」と表現された。[6] Ubuntuは代わりに独自のサービス管理ツールであるUpstartを開発し、これに切り替えた。
2006年8月、Appleは他のオープンソース開発者による採用を容易にするために、 launchd をApacheライセンスバージョン2.0に再ライセンスしました。 [7]ほとんどのLinuxディストリビューションはsystemdまたはUpstart を使用するか、initを継続しており、BSDも init を継続しています。
2013年12月、R. Tyler Croyは、launchdのFreeBSDへの移植作業を再開する意向を発表し、その後、彼の「openlaunchd」GitHubリポジトリの活動が活発化した。[8]
launchdのMac OS ForgeエリアのWayback Machineによる最後のキャプチャは2012年6月のものであり、[9] Appleの最新のオープンソースバージョンはOS X 10.9.5のコード842.92.1であった。
2014年、OS X 10.10とiOS 8で、Appleはlaunchdのコードをクローズドソースのlibxpcに移行しました。[10]
2015 年 8 月、Jordan Hubbard 氏と Kip Macy 氏は、 FreeBSD -CURRENT カーネルをベースに、Mach IPC、Libdispatch、notifyd、asld、launchd、および Apple の OS X 用オープンソース コードである Darwin から派生したその他のコンポーネントを追加した NextBSD を発表しました。
Apple オープンソースリリース履歴
参照
- systemd : Red Hatがさまざまなメインライン Linux ディストリビューションで使用するために開発した同様のユーティリティ
- サービス管理施設
- スーパーサーバー
- TCP ラッパー
- オペレーティングシステムのサービス管理
参考文献
- ^ 「Tiger Details」。Daring Fireball。WaitingForLoginWindow 。 2020年2月23日閲覧。
- ^ Mac OS X マニュアルページ launchd.conf(5)
- ^ – DarwinおよびmacOSファイル形式マニュアル
- ^ little-big-h (2014年1月30日). 「node-launchd」. 2014年4月10日閲覧。
- ^ 「Launchd」。FreeBSD wiki 。 2013年12月8日閲覧。
- ^ 「ReplacementInit」。UbuntuWiki 。 2007年7月2日閲覧。
- ^ Prabhakar, Ernest (2006年8月7日). 「Apple Opens Up: Kernel, Mac OS Forge, iCal Server, Bonjour, Launchd」. darwin-dev (メーリングリスト) . 2023年3月25日閲覧。
- ^ Croy, R Tyler. 「The Scratchiest Neckbeard、または私のThinkpad X200上のFreeBSD」unethicalblogger.com。 2017年11月13日時点のオリジナルよりアーカイブ。2013年12月8日閲覧。
{{cite web}}: CS1 maint: unfit URL (link) - ^ "launchd". Mac OS Forge . Apple Inc. 2012年6月9日時点のオリジナルよりアーカイブ。2016年9月3日閲覧。
- ^ Levin, Jonathan (2014). 「Launchd – At Your Service!」(PDF) . p. 32 . 2016 年9 月 3 日閲覧。
… 10.10: libxpc 559 (iOS 8 では 560) に移動 – ソースはまだ利用できません – 今後も利用できない可能性があります – Libxpc はクローズド ソース プロジェクトです …
- ^ 「launchd 106 ライセンス ファイル」。
- ^ 「Mac OS X 10.4 - ソース」。
- ^ 「Mac OS X 10.4.1 - ソース」。
- ^ 「launchd 106.3 ライセンス ファイル」。
- ^ 「Mac OS X 10.4.2 - ソース」。
- ^ 「Mac OS X 10.4.3 - ソース」。
- ^ 「Mac OS X 10.4.4.ppc - ソース」。
- ^ 「Mac OS X 10.4.5.ppc - ソース」。
- ^ 「launchd 106.10 ライセンス ファイル」。
- ^ 「Mac OS X 10.4.4.x86 - ソース」。
- ^ 「Mac OS X 10.4.5.x86 - ソース」。
- ^ 「launchd 106.13 ライセンス ファイル」。
- ^ 「Mac OS X 10.4.6.ppc - ソース」。
- ^ 「Mac OS X 10.4.6.x86 - ソース」。
- ^ 「launchd 106.14 ライセンス ファイル」。
- ^ 「Mac OS X 10.4.7.ppc - ソース」。
- ^ 「Mac OS X 10.4.7.x86 - ソース」。
- ^ 「Mac OS X 10.4.8.ppc - ソース」。
- ^ 「Mac OS X 10.4.9.ppc - ソース」。
- ^ 「Mac OS X 10.4.10.ppc - ソース」。
- ^ 「Mac OS X 10.4.11.ppc - ソース」。
- ^ 「launchd 106.20 ライセンス ファイル」。
- ^ 「Mac OS X 10.4.8.x86 - ソース」。
- ^ 「Mac OS X 10.4.9.x86 - ソース」。
- ^ 「Mac OS X 10.4.10.x86 - ソース」。
- ^ 「Mac OS X 10.4.11.x86 - ソース」。
- ^ 「開発者ツール 2.4 - ソース」。
- ^ 「launchd 152 ライセンス ファイル」。
- ^ 「launchd 257 ライセンス ファイル」。
- ^ 「Mac OS X 10.5 - ソース」。
- ^ 「Mac OS X 10.5.1 - ソース」。
- ^ 「開発者ツール 3.1 - ソース」。
- ^ 「開発者ツール 3.1b - ソース」。
- ^ 「開発者ツール 3.1.1 - ソース」。
- ^ 「開発者ツール 3.1.2 - ソース」。
- ^ 「開発者ツール 3.1.3 - ソース」。
- ^ 「開発者ツール 3.1.4 - ソース」。
- ^ 「launchd 258.1 ライセンス ファイル」。
- ^ “Mac OS X 10.5.2 - ソース”. 2020年9月21日時点のオリジナルよりアーカイブ。2019年8月19日閲覧。
- ^ 「launchd 258.12 ライセンス ファイル」。
- ^ 「Mac OS X 10.5.3 - ソース」。
- ^ 「Mac OS X 10.5.4 - ソース」。
- ^ 「launchd 258.18 ライセンス ファイル」。
- ^ 「Mac OS X 10.5.5 - ソース」。
- ^ 「launchd 258.19 ライセンス ファイル」。
- ^ 「Mac OS X 10.5.6 - ソース」。
- ^ 「launchd 258.22 ライセンス ファイル」。
- ^ 「Mac OS X 10.5.7 - ソース」。
- ^ 「launchd 258.25 ライセンス ファイル」。
- ^ 「Mac OS X 10.5.8 - ソース」。
- ^ 「launchd 328 ライセンス ファイル」。
- ^ 「Mac OS X 10.6 - ソース」。
- ^ 「Mac OS X 10.6.1 - ソース」。
- ^ 「Mac OS X 10.6.2 - ソース」。
- ^ 「開発者ツール 3.2.1 - ソース」。
- ^ 「開発者ツール 3.2.2 - ソース」。
- ^ 「開発者ツール 3.2.3 - ソース」。
- ^ 「開発者ツール 3.2.4 - ソース」。
- ^ 「launchd 329.3 ライセンス ファイル」。
- ^ 「Mac OS X 10.6.3 - ソース」。
- ^ 「launchd 329.3.1 ライセンス ファイル」。
- ^ 「Mac OS X 10.6.4 - ソース」。
- ^ 「開発者ツール 3.2.5 - ソース」。
- ^ 「開発者ツール 3.2.6 - ソース」。
- ^ 「launchd 329.3.2 ライセンス ファイル」。
- ^ 「Mac OS X 10.6.5 - ソース」。
- ^ 「launchd 329.3.3 ライセンス ファイル」。
- ^ 「Mac OS X 10.6.6 - ソース」。
- ^ 「Mac OS X 10.6.7 - ソース」。
- ^ 「Mac OS X 10.6.8 - ソース」。
- ^ 「launchd 392.18 ライセンス ファイル」。
- ^ 「Mac OS X 10.7 - ソース」。
- ^ 「Mac OS X 10.7.1 - ソース」。
- ^ 「launchd 392.35 ライセンス ファイル」。
- ^ 「Mac OS X 10.7.2 - ソース」。
- ^ 「launchd 392.36 ライセンス ファイル」。
- ^ 「Mac OS X 10.7.3 - ソース」。
- ^ 「launchd 392.38 ライセンス ファイル」。
- ^ 「Mac OS X 10.7.4 - ソース」。
- ^ 「launchd 392.39 ライセンス ファイル」。
- ^ 「Mac OS X 10.7.5 - ソース」。
- ^ 「launchd 442.21 ソース コードのライセンス ヘッダー」。
- ^ 「Mac OS X 10.8 - ソース」。
- ^ 「Mac OS X 10.8.1 - ソース」。
- ^ 「launchd 442.26.2 ソース コードのライセンス ヘッダー」。
- ^ 「Mac OS X 10.8.2 - ソース」。
- ^ 「Mac OS X 10.8.3 - ソース」。
- ^ 「Mac OS X 10.8.4 - ソース」。
- ^ 「Mac OS X 10.8.5 - ソース」。
- ^ 「launchd 842.1.4 ソース コードのライセンス ヘッダー」。
- ^ 「OS X 10.9 - ソース」。
- ^ 「OS X 10.9.1 - ソース」。
- ^ 「launchd 842.90.1 ソース コードのライセンス ヘッダー」。
- ^ 「OS X 10.9.2 - ソース」。
- ^ 「OS X 10.9.3 - ソース」。
- ^ 「launchd 842.92.1 ソース コードのライセンス ヘッダー」。
- ^ 「OS X 10.9.4 - ソース」。
- ^ 「OS X 10.9.5 - ソース」。
外部リンク
Apple 開発者:
- Mac 開発者ライブラリ: デーモンとサービス プログラミング ガイド: 起動デーモンとエージェントの作成
- Mac 開発者ライブラリ: テクニカル ノート TN2083: デーモンとエージェント
Apple Developer 廃止ドキュメントライブラリ:
- : システム全体のデーモンとユーザーごとのエージェント マネージャー – DarwinおよびmacOSシステム管理者のマニュアル
- – DarwinとmacOSファイル形式マニュアル
- – DarwinとmacOSファイル形式マニュアル
- – DarwinおよびmacOS一般コマンドマニュアル
その他のリンク:
- Apple Developer Library: Wayback Machineの launchd 入門(2007 年 7 月 4 日アーカイブ)
- Launchd: すべてを統括する 1 つのプログラム - YouTube - Dave Zarzycki によるプレゼンテーション、2007 年 10 月 8 日にGoogleTechTalksによってアップロード
- wiki.freebsd.org/launchd
- developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPSystemStartup/
