連載
» 2007年04月26日 08時00分 公開

Undocumented Mac OS X:第1回 initを置き換えるlaunchd【前編】 (2/3)

[白山貴之,ITmedia]

launchdとは?

 Tigerで採用されたlaunchdとは、initに代わって、最初に起動するPID 1のプロセスである。launchdは、initと同様端末の初期化やシェルを起動し、rcスクリプトの実行を処理する一方、OS起動時やユーザーのログイン時などにプロセスを起動する手段を提供する。それに加えinetd/xinetdと同じようにネットワークのポートを監視し、またcronのように指定時刻ごとにプロセスを立ち上げる。さらに、指定ファイルが編集されたり、指定ディレクトリにファイルが置かれたりするたびにプロセスを立ち上げるなどの手段も同時に提供する。

 こうしたlaunchdのサービスは、サービスごとに個別の設定ファイルに記述される。launchd.plistと呼ばれるこの設定ファイルは、ファイルシステムドメイン*ごとに存在するLaunchDaemonsとLaunchAgents*というディレクトリのいずれかに配置され(表1)、XMLを用いた単一の書式でできている。この書式さえ理解すれば、定時実行であれ、ネットワークからのアクセスであれ、どの手段を利用したサービスの実行も指定できる。XMLであるため機械的な処理もでき、アプリケーションから自動的に設定を追加するのもそう難しくない(図1)

表1 表1 ファイルシステムドメインごとに存在するLaunchDaemonsとLaunchAgents
図1 図1 launchdによる変化

 また、launchdはPID 1で動作するだけではない。必要に応じて、ログインしているユーザーごとにそれぞれユーザー向けlaunchdが動作し、ユーザーごとに独自のサービスを実行するために用いられる。

AgentとDaemon

 launchdが起動するサービスは大きく分けて2つ、AgentとDaemonに分類される。

 Daemonはいわゆるデーモンであり、root権限での動作を前提としている。これはログインしているユーザーが誰であるか、そもそもログインしているユーザーがいるかといったこととは関係を持たないサービスを意味する。

 一方AgentはDaemonとは異なり、現在ログインしているユーザーごとに起動される各ユーザー向けのサービスを意味する。例えば「ことえり」やATOKのような入力プログラム、iCalやiTunesのヘルパープログラムといったユーザーごとに実行されるバックエンドサービスを起動するのに使用できる。

このページで出てきた専門用語

ファイルシステムドメイン

/Systemの下、/直下、「/Users/<ユーザー名>」といったディレクトリの下にLibraryやApplicationsというディレクトリがあり、同じような設定を格納しているMac OS X特有のディレクトリ構成をファイルシステムドメインという。ファイルシステムドメインは「Users/<ユーザー名>」を起点としたユーザーごとのユーザードメイン、ルートを起点としたマシンローカルのローカルドメイン、/Networkを起点としたネットワーク(サイトローカル)ドメイン、そして/Systemを起点としたMac OS Xで標準のシステムドメインがあり、影響力の小さいユーザードメインが最も優先順優先順優先順位が高く、影響力の大きいシステムドメインが優先優先度が低くなっている。この仕組みによって、システムドメインに属する標準のファイルを変更することなくマシンごとやユーザーごとに状態の上書きを行えたり、launchdのようにマシンごと、ユーザーごとに類似の設定を同一名称のディレクトリに集めることで見通しが良くなる。

ファイルシステムドメインごとに存在するLaunchDaemonsとLaunchAgents

ただし、ユーザードメインにはLaunchDaemonsディレクトリは存在しない。各ユーザーごとに「root権限で動作する」サービスを指定できる必要性はまったくないからだ。


Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ