先のリスト6に注釈を加えた図1を見てほしい。すると、見慣れないキーワードがあることに気が付くだろう。KeepAliveというのがそれだ。Leopardでは、新たに表1(6ページ目に掲載)にあるキーワードが追加、変更されている(Tigerまでに関するlaunchdの設定項目一覧は7ページ目の表2を参照してほしい)。
利用例も含めた「表1: Leopardで追加された、launchdの新しい設定項目(キーワード)一覧」を、PDFデータとして用意しています。
user level starterとしてのlaunchd
また、図2と図3を見てほしい。これは、TigerとLeopardのアクティビティモニタでプロセスの階層表示をしたところだ。余談だが、ここではLeopardで追加された画面共有機能を用いている。これはApple Remote Desktopのサブセットで、VNCプロトコルを用いてリモートマシンのGUIを表示できる機能だ(図4)。
図4: Finderのメニューからファイル共有だけではなく、画面の共有も可能になった。これはApple Remote Desktopと同じVNCベースの機構で、MacだけではなくVNCの動作しているWindowsやLinuxでも接続が可能だ |
閑話休題、Tigerまでは、WindowServerがユーザアプリケーションすべての親プロセスであった。Finderは単なる1アプリケーションに過ぎず、子プロセスを持たず、アプリケーションを起動するときは、LaunchServiceを通じてWindowServerに起動の依頼をしているだけの存在であった。すべてのアプリケーションは画面描画を司るWindowServerから実行されていたのだ。
一方、Leopardでは、ユーザレベルのlaunchdがその位置にある。WindowServerすらもlaunchdの子プロセスに過ぎない。アプリケーションを起動する役割は、launchdが担っているのだ。
ユーザーレベルのlaunchdはユーザーのログイン時に起動され、/System/Libary
、/Library
、ユーザホームにあるLibrary
の3つのLibraryフォルダの下にあるLaunchdAgents
フォルダをユーザのログイン時に参照し、起動時やネットワーク接続の変更時など、指定されたタイミングで適切なバックグラウンドプロセスを起動する。iCalなどスケジューラのリマインダ機能やTime Machineのバックアップエージェント、Input Methodのサーバなど、ユーザの活動に応じたバックグラウンドプロセスの存在は不可欠だ。これまではいろいろな小細工を弄してそうしたプロセスを立ち上げていたが、LaunchAgentを用いることでシステム標準かつ起動処理などと同じ統一的な手法でバックグラウンドプロセスが用意できる。この点がLeopardで強化されたのだ。
図5: |
手っ取り早くこの強化を実感したい場合は、SSHを使ってみるといいだろう。Leopardは標準で、ssh-agent
をバックグラウンドに起動している。Terminalから起動したssh
コマンドを含むすべてのアプリが、ssh-agent
の機能を利用できるのだ(図5)。
また、パスフレーズの入力はKeychainと統合されている。KeychainにSSHのパスフレーズを記憶させていたなら、ssh-add
を使わずにパスフレーズの入力も自動化され、あっという間にリモートサイトへログインできる(注3)。
見えないところも進化している
まずは実質的な第1回ということで、軽めの話題であるrcの引退とlaunchdについてを取り上げた。もちろん、これは前回に述べたように300の新機能からはうかがい知れない改善だ。しかし、例えばTime Machineのバックアップを支えているのはこうした改善された起動処理、ユーザレベルでのエージェント起動処理の強化である。
派手な一覧に惑わされてはいけない。Leopardは、そしてMac OS Xはそれらを支える強力な土台をもつ、骨太なOSなのだから。
注3: パスフレーズの入力も自動化され、あっという間にリモートサイトへログインできる
パスフレーズによる認証は相手側サイトの.ssh/authorized_keys
に公開鍵を登録した場合に限られる。公開鍵による認証をしないパスワード入力については、手動で入力する必要がある。