(Translated by https://www.hiragana.jp/)
launchd - Wikipedia コンテンツにスキップ

launchd

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』
launchd
作者さくしゃ Apple
初版しょはん 2005ねん4がつ29にち
プログラミング
言語げんご
C言語げんご
対応たいおうOS macOS, FreeBSD
サポートじょうきょう 開発かいはつちゅう
種別しゅべつ システムスタートアップソフトウェア
ライセンス Apache License 2.0
公式こうしきサイト http://www.opensource.apple.com/source/launchd/
テンプレートを表示ひょうじ

launchdは、デーモンアプリケーションプロセススクリプト起動きどう停止ていし管理かんりおこなう、オープンソースのサービス管理かんりフレームワークである。AppleのDave Zarzyckiによってつくられ、Mac OS X Tiger (Mac OS X v10.4)導入どうにゅうされた。Apache Licenseのもとで公開こうかいされている。

launchdデーモン基本きほんてき以下いかえるものである:

Appleはlaunchdを推進すいしんし、上記じょうきのすべてのサービスを廃止はいしするとした。[1]

これらのデーモンがあつかっていたほとんどのプロセスが、Mac OS X v10.4でlaunchdに移行いこうされた。すべてのlaunch serviceをひとつのプログラムに統合とうごうすることで、launchdはおそいコンピュータでもブート時間じかんいちじるしくみじかくする。

コンポーネント

[編集へんしゅう]

launchdシステムには、launchdとlaunchctlというふたつのおもなプログラムがある。

launchdはシステムレベルとユーザレベルの両方りょうほうデーモン管理かんりする。xinetd同様どうように、launchdはオンデマンドでデーモンを起動きどうできる。またwatchdogdのように、デーモンが確実かくじつ動作どうさしつづけているかを監視かんしする。macOSにおいて、launchdはPID 1としてinitのかわりにブートのシステムの開始かいしあつかう。

設定せっていファイルはlaunchdが実行じっこうするサービスのパラメータを定義ていぎする。やく30の設定せってい可能かのうなキーをもつプロパティリストファイルが、ライブラリフォルダ以下いかのLaunchAgentsとLaunchDaemonsというサブディレクトリにかれる。

launchctlはデーモンのロードとアンロード、launchdが管理かんりするジョブの開始かいし停止ていし、launchdやプロセスのためのシステム利用りよう統計とうけい取得しゅとく環境かんきょう設定せってい使用しようされるコマンドラインアプリケーションである。

launchdには、システムのブートと、サービスをロードし維持いじするというふたつのおもなタスクがある。

PowerPC MacにおけるMac OS X Tigerのシステムの起動きどう概略がいりゃく以下いかしめす。(Intel Macでは、Open FirmwareEFIに、BootXboot.efi にそれぞれえられている):

  1. Open Firmwareがハードウェアを初期しょきし、それからBootXをロードする。
  2. BootXがカーネルをロードし、スピンカーソルを表示ひょうじ、すべての必要ひつようカーネル機能きのう拡張かくちょうをロードする。
  3. カーネルがlaunchdをロードする。
  4. launchdは /etc/rc実行じっこうし、/System/Library/LaunchDaemons/Library/LaunchDaemons参照さんしょうして、必要ひつようおうじてplistにもとづいた動作どうさおこない、ログインウインドウを起動きどうする。

ステップ4でlaunchdはジョブを実行じっこうするためにふたつのフォルダを参照さんしょうする。LaunchDaemonsフォルダには、rootとして実行じっこうする(ふつうバックグラウンドの)プロセスの項目こうもくがある。LaunchAgentsフォルダには、ユーザかユーザランドのコンテキストで実行じっこうされる、エージェントアプリケーションとばれるジョブがある。これらはスクリプトかフォアグランド項目こうもくかもしれないし、ユーザインタフェースをふくめることもできる。これらのディレクトリはすべてmacOSのライブラリフォルダのなかかれる。

launchdは、ブートにすべてのデーモンをげるとはかぎらないてんでSystemStarterと非常ひじょうことなっている。launchdの重要じゅうようかんがえかたであり、またxinetd類似るいじしているてんが、デーモンをオンデマンドで起動きどうするということである。ブートにジョブplistを参照さんしょうしたとき、launchdはそれらのジョブで要求ようきゅうされたすべてのポートを確保かくほしlistenする。plistに"OnDemand"キーが指定していされると、そのときデーモンは実際じっさいにはロードされず、launchdがポートをlistenして必要ひつようおうじてデーモンを起動きどうしたり終了しゅうりょうしたりする。デーモンがロードされたあと、launchdはその経過けいかい、必要ひつようなあいだ確実かくじつ動作どうさ継続けいぞくさせる。この方式ほうしきwatchdogdており、プロセスがかってにforkしたりデーモンしたりしないようにするというwatchdogdの要件ようけん共通きょうつうしている。もしプロセスがバックグラウンドにはいると、launchdは追跡ついせきうしない、プロセスのさい起動きどうこころみる。

その結果けっか、Mac OS X Tigerはこれまでよりずっとはやくブートする。システムはデーモンを実際じっさいげるのではなく、登録とうろくだけすればよい。事実じじつ、ブートちゅうにみえるプログレスバーはほんとうに時間じかん経過けいか以外いがいなにもしめさない(WaitingForLoginWindowとづけられた[2]せかけのアプリケーションである。

launchdのブートのなかでいちばんの管理かんり難所なんしょ依存いぞん関係かんけいである。SystemStarterには、起動きどう項目こうもくのplistのなかに"Uses", "Requires", "Provides" キーをもちいたとてもシンプルな依存いぞん関係かんけいのシステムがあった。Tigerにおいてソフトウェアのげの依存いぞん関係かんけい確立かくりつするとき、ふたつのおもなやりかたがある。プロセスあいだ通信つうしん使つかうと、デーモンどうしのあいだでたがいに通信つうしんして依存いぞん関係かんけい解決かいけつすることが許容きょようされる。あるいは、ファイルやファイルパスの変更へんこう監視かんしすることもできる。プロセスあいだ通信つうしん使つかうことは、SystemStarterのキーよりもはるかにとらえにくいもので開発かいはつしゃによりおおくの負担ふたんをもとめるが、しかしより簡潔かんけつはや起動きどうむすびつくかもしれない。SystemStarterはまだサポートされているオプションだが、Mac OS X Tigerではその重要じゅうようせいっており、将来しょうらいてきには利用りようできなくなるかもしれない。

既存きそんのしくみによるサービス制御せいぎょについての不満ふまんひとつは、それらを集中しゅうちゅう管理かんりするための方法ほうほうがなく、OSじょうらばっているということである。Appleはlaunchctlでこれに対処たいしょした。

launchctlはそれ自身じしんコマンドラインや、標準ひょうじゅん入力にゅうりょく対話たいわモードから操作そうさ可能かのうなコマンドである。~/.launchd.conf/etc/launchd.confくことでコマンドを保存ほぞんできる。スーパーユーザー権限けんげんでlaunchctlはシステム全体ぜんたい変更へんこうができる。

プロパティリスト

[編集へんしゅう]

プロパティリスト (plist) はAppleがプログラムの設定せっていもちいる形式けいしきである。launchdがフォルダを参照さんしょうしたときやlaunchctlを使つかってジョブがサブミットされたとき、どのようにプログラムを実行じっこうするかがかれたplistファイルをむ。

よく使つかわれるキーを以下いかしめす。すべてがったリストは、launchd.plistについてのAppleによるマニュアルを参照さんしょう[3]

キー 説明せつめい 必須ひっすかどうか
Label ジョブの名称めいしょう慣習かんしゅうにより、ジョブの名称めいしょう.plist拡張子かくちょうしのぞいたplistのファイルめいとおなじ。 必須ひっす
Program 実行じっこうファイルへのパス。シンプルな起動きどう役立やくだつ。 ProgramかProgramArgumentsのどちらかひとつが必須ひっす
ProgramArguments unixコマンドをあらわした文字もじれつ。はじめの文字もじれつはふつう実行じっこうファイルへのパスで、あとの文字もじれつはオプションやパラメータをふくむ。
UserName ここであたえられたユーザでジョブを実行じっこうする。かならずしもそれをlaunchdにサブミットしたユーザでなくてもよい。 オプション。デフォルトではrootかカレントユーザ。
OnDemand 10.5では推奨すいしょう。ジョブを持続じぞくてき実行じっこうするかどうかを定義ていぎするブーリアンフラグ。 オプション。デフォルトではtrue。
RunAtLoad launchdにジョブがロードされたときすぐにタスクを起動きどうするかどうかを定義ていぎするブーリアンフラグ。 オプション。デフォルトではfalse。
StartOnMount あたらしいファイルシステムがマウントされたときにタスクを起動きどうするかどうかを定義ていぎするブーリアンフラグ。
QueueDirectories あたらしいファイルがないかディレクトリを監視かんしする。開始かいしするにはディレクトリはそらでなければならない。また、QueueDirectoriesがふたたびタスクを起動きどうするまえにそら状態じょうたいにもどさなければならない。 オプション。
WatchPaths 変更へんこうがないかファイルかフォルダのパスを監視かんしする。
StartInterval ジョブをくりがえして実行じっこうするスケジュールにする。実行じっこうのあいだのウェイトびょうすうとして指定していされる。
StartCalendarInterval ジョブスケジューリング。構文こうぶんcron同様どうよう
RootDirectory ジョブを実行じっこうするまえにこのディレクトリにchrootする。
WorkingDirectory ジョブを実行じっこうするまえにこのディレクトリにchdirする。
StandardInPath, StandardOutPath, StandardErrorPath げたプロセスのための入出力にゅうしゅつりょくファイルを定義ていぎするキー。
LowPriorityIO ファイルシステムI/Oをするときタスクの優先ゆうせんひくいことをカーネルにしらせる。
AbandonProcessGroup launchdによってげられたタスクが起動きどうしたサブプロセスを、タスクがおわったときにkillするかどうかを定義ていぎするブーリアンフラグ。みじかいタスクがながいサブタスクを起動きどうするところで役立やくだつが、ゾンビプロセスをしょうじるかもしれない。 オプション。デフォルトではfalse。

macOS以外いがいでの使用しよう

[編集へんしゅう]

Google Summer of Code Project in 2005の一環いっかんとしてFreeBSD移植いしょくされた。

2006ねんUbuntuはlaunchdを使用しようすることをかんがえていたが、当時とうじApple Public Source License公開こうかいされていたので「回避かいひ不能ふのうなライセンス問題もんだい」があるとしてこのオプションはリジェクトされた。[4]

2006ねん8がつにAppleは、launchdをほかのオープンソース開発かいはつしゃがより簡単かんたん採用さいようできるようApache License, Version 2.0のもとでライセンスした。[5]

関連かんれん項目こうもく

[編集へんしゅう]

参考さんこう文献ぶんけん

[編集へんしゅう]
  1. ^ Mac OS X Manual Page For launchd(8)”. 2008ねん1がつ8にち閲覧えつらん
  2. ^ Daring Fireball: Tiger Details
  3. ^ Mac OS X Manual Page For launchd.plist(5)
  4. ^ ReplacementInit”. UbuntuWiki. 2007ねん7がつ2にち閲覧えつらん
  5. ^ Prabhakar, Ernest (2006ねん8がつ7にち). “Apple Opens Up: Kernel, Mac OS Forge, iCal Server, Bonjour, Launchd”. 2007ねん7がつ2にち閲覧えつらん

外部がいぶリンク

[編集へんしゅう]