FreeBSD - The Power To Serve

GitHubに「Open Launchd」プロジェクトが追加された。Open LaunchdはMac OS Xのlaunchd(8)をFreeBSDへ移植することを目的にしており、最終的にはほかのBSD系オペレーティングシステムやLinux系オペレーティングシステムでも利用できるようにすることを目指している。システムの起動時間の短縮を実現できるほか、より包括的なプロセス管理が可能になるとされている。

Mac OS Xのlaunchd(8)は従来の仕組みでいえばinit(8)、rc(8)、cron(8)などを組み合わせたような作りになっている。カーネルが読み込まれたあとにカーネルによって起動され(init(8)に相当)、以降はシステムの起動処理を担当する(rc(8)に相当)。システム起動後はジョブ管理やユーザの使用するソフトウェア起動処理制御などに使われる(cron(8)に相当)。

/Users/daichi% ps ax | grep launchd
    1   ??  Ss     0:07.91 /sbin/launchd
  172   ??  Ss     0:00.06 /sbin/launchd
  173   ??  Ss     0:02.22 /sbin/launchd
  505   ??  Ss     0:00.01 /sbin/launchd
 1654 s003  R+     0:00.00 grep launchd
/Users/daichi% 
Mac OS Xで動作しているlaunchd(8)

Mac OS Xにおけるlaunchd(8)の動作例

Mac OS Xにおけるlaunchd(8)の動作例

Mac OS Xにおけるlaunchd(8)の動作例

Mac OS Xにおけるlaunchd(8)の動作例

UNIX系オペレーティングシステムではカーネルによって起動されるのはinit(8)であることが多い。最初に起動されるため通常プロセス番号には1が使われる。Mac OS Xではカーネルが呼び出すのはlaunchd(8)であるため、launchd(8)にプロセス番号1が割り振られている。

% ps -u -p 1
USER PID %CPU %MEM  VSZ RSS TT  STAT STARTED    TIME COMMAND
root   1  0.0  0.0 9428 756  -  ILs  Tue10AM 0:00.06 /sbin/init --
% 
FreeBSDではinit(8)がプロセス番号1としてカーネルから起動される

UNIX系オペレーティングシステムのシステム起動時におけるコマンドの実行やデーモンの起動処理などにはいくつかのやり方があり、Linuxディストリビューションでもディストリビューションごとに異なる仕組みを採用している。launchd(8)のアプローチがこうした既存のオペレーティングシステムでデフォルトのシステムとして採用されるかどうかは不透明だが、システムの起動時間短縮という目的で採用するには興味深いソフトウェア。