init プログラムの動作

init プログラムは、設定ファイル inittab に基づいて動作します。また、init プログラムはランレベルという概念を用いています。これは、システムの状態を表します。

/etc/inittab
# These are the default runlevels in Slackware:
#   0 = halt
#   1 = single user mode
#   2 = unused (but configured the same as runlevel 3)
#   3 = multiuser mode (default Slackware runlevel)
#   4 = X11 with KDM/GDM/XDM (session managers)
#   5 = unused (but configured the same as runlevel 3)
#   6 = reboot

Slackware Linux デフォルトの inittab によると、ランレベル 0 は電源遮断状態、ランレベル 1 はシングルユーザモード、ランレベル 3 はマルチユーザモード、ランレベル 4 は X window 用のモード、ランレベル 6 は再起動状態と定義されています。ランレベル 2 と 5 は使われません。

/etc/inittab
# Default runlevel. (Do not set to 0 or 6)
id:3:initdefault:

ここでは、デフォルトのランレベルが定義されます。ランレベル 3、すなわちマルチユーザモードがデフォルトのランレベルとなります。

/etc/inittab
# System initialization (runs when system boots).
si:S:sysinit:/etc/rc.d/rc.S

システム起動時に /etc/rc.d/rc.S を実行します。/etc/rc.d/rc.S ではシステムの初期化処理を行います。

/etc/inittab
# Script to run when going single user (runlevel 1).
su:1S:wait:/etc/rc.d/rc.K

ランレベルが 1 またはシングルユーザモードへ移行した時 /etc/rc.d/rc.K を実行します。/etc/rc.d/rc.K ではすべてのデーモンを終了します。init は /etc/rc.d/rc.K の終了を待ちます。

/etc/inittab
# Script to run when going multi user.
rc:2345:wait:/etc/rc.d/rc.M

ランレベルが 2、3、4、5 のいずれかへ移行した時 /etc/rc.d/rc.M を実行します。/etc/rc.d/rc.M ではさまざまな設定を行います。init は /etc/rc.d/rc.M の終了を待ちます。

/etc/inittab
# What to do at the "Three Finger Salute".
ca::ctrlaltdel:/sbin/shutdown -t5 -r now

CTRL-ALT-DEL が押された時 /sbin/shutdown -t5 -r now を実行します。/sbin/shutdown -t5 -r now は 5 秒後にシステムを再起動します。

/etc/inittab
# Runlevel 0 halts the system.
l0:0:wait:/etc/rc.d/rc.0

ランレベルが 0 へ移行した時 /etc/rc.d/rc.0 を実行します。/etc/rc.d/rc.0 では終了処理を行います。init は /etc/rc.d/rc.0 の終了を待ちます。

/etc/inittab
# Runlevel 6 reboots the system.
l6:6:wait:/etc/rc.d/rc.6

ランレベルが 6 へ移行した時 /etc/rc.d/rc.6 を実行します。/etc/rc.d/rc.6 では終了処理を行います。init は /etc/rc.d/rc.6 の終了を待ちます。

/etc/inittab
# What to do when power fails.
pf::powerfail:/sbin/genpowerfail start

電源に異常が起きた時 /sbin/genpowerfail start を実行します。init はこのことを UPS 管理デーモンにより知らされます。init は /sbin/genpowerfail start の終了を待ちません。

/etc/inittab
# If power is back, cancel the running shutdown.
pg::powerokwait:/sbin/genpowerfail stop

電源異常状態から復帰した時 /sbin/genpowerfail stop を実行します。init は /sbin/genpowerfail stop の終了を待ちます。

/etc/inittab
# These are the standard console login getties in multiuser mode:
c1:1235:respawn:/sbin/agetty 38400 tty1 linux
c2:1235:respawn:/sbin/agetty 38400 tty2 linux
c3:1235:respawn:/sbin/agetty 38400 tty3 linux
c4:1235:respawn:/sbin/agetty 38400 tty4 linux
c5:1235:respawn:/sbin/agetty 38400 tty5 linux
c6:12345:respawn:/sbin/agetty 38400 tty6 linux

ランレベルが 1、2、3、5 のいずれかへ移行した時 agetty を 6 個起動します。ランレベルが 4 へ移行した時は agetty を 1 個だけ起動します。init は agetty の終了後、再び agetty を起動します。但し、ここでの agetty 終了とは、結果的にログインシェルの終了を意味します。

/etc/inittab
# Runlevel 4 used to be for an X window only system, until we discovered
# that it throws init into a loop that keeps your load avg at least 1 all 
# the time. Thus, there is now one getty opened on tty6. Hopefully no one
# will notice. ;^)
# It might not be bad to have one text console anyway, in case something 
# happens to X.
x1:4:wait:/etc/rc.d/rc.4

ランレベルが 4 へ移行した時 /etc/rc.d/rc.4 を実行します。init は /etc/rc.d/rc.4 の終了を待ちます。

マルチユーザモードを例に、実行されるプログラムを追うと次のようになります。

  1. /etc/rc.d/rc.S - システム初期化処理
  2. /etc/rc.d/rc.M - さまざまな設定
  3. /sbin/agetty 38400 tty1 linux - tty ポートを開きログインプロンプトを出力する
  4. /sbin/agetty 38400 tty2 linux
  5. /sbin/agetty 38400 tty3 linux
  6. /sbin/agetty 38400 tty4 linux
  7. /sbin/agetty 38400 tty5 linux
  8. /sbin/agetty 38400 tty6 linux

参考文献


前へ 起動プロセス入門 次へ