Provided by: manpages-ja_0.5.0.0.20221215+dfsg-1_all bug

名前

       init, telinit - プロセス制御の初期化

書式

       /sbin/init [ -a ] [ -s ] [ -b ] [ -z xxx ] [ 0123456Ss ]
       /sbin/telinit [ -t sec ] [ 0123456sSQqabcUu ]

説明

       init  は全てのプロセスの親である。 その主な役割は、/etc/inittab (inittab(5) 参照) ファイル
       に書かれたスクリプトに従ってプロセスを作り出すことにある。  通常このファイルには、ユーザが
       ログイン可能な各接続ラインごとに getty を生成させるためのエントリが記されている。 また、特
       定のシステムが必要とする、自律的なプロセスの制御も行う。

ランレベル

       ランレベル とはシステムのソフトウェア的な設定で、 指定したプロセス群のみを存在させるように
       するものである。  それぞれのランレベルで init が作り出すプロセスは /etc/inittab ファイルで
       定められている。 init0–6, S, s という 8 つのランレベルのうちの一つを取ることができる。
       ランレベルは特権ユーザが telinit を実行することによって変更される。 telinitinit に適切
       なシグナルを送り、 どのランレベルに変更すべきかを指示する。

       ランレベル 0, 1, 6 は予約されている。 ランレベル 0 はシステムを停止するために、 ランレベル
       6 はシステムをリブートするために、 ランレベル 1 はシステムをシングルユーザモードにするため
       に用いられる。 ランレベル S は直接用いるためのものではなく、 ランレベル 1 になった時に実行
       されるスクリプトのために存在する。  この詳細は shutdown(8) および inittab(5) 各 man ページ
       を参照のこと。

       文書には書かれてはいないが、ランレベル 7-9 も使用できる。 文書に書かれていないのは、「伝統
       的な」  Unix  の派生種はランレベル 7-9 を使用していないからである。 参考のために言っておく
       と、実はランレベル Ss も同様である。 内部的には、この 2 つは同一のランレベルのエイリア
       スになっている。

ブート

       カーネルブートの最後のステップとして init が起動されると、 init/etc/inittab ファイルを
       検索し、 initdefault というエントリが存在するか調べる (inittab(5) 参照)。 initdefault はシ
       ステムが最初に取るべきランレベルを定義する。 /etc/inittab ファイル中にそのようなエントリが
       ない場合、 あるいは /etc/inittab ファイル自体が存在しない場合は、 システムコンソールからラ
       ンレベルを入力しなければならない。

       ランレベルを  S  または  s  にすると、  システムはシングルユーザモードに入る。  この場合は
       /etc/inittab    ファイルを必要としない。     シングルユーザモードでは、/dev/console/sbin/sulogin が起動される。

       シングルユーザモードに入るとき、  init/etc/ioctl.save からコンソールの ioctl(2) の状態
       を読み込む。 このファイルが存在しない場合は、init はコンソールの接続ラインを 9600 baudCLOCAL  という設定  (訳注: ローカルに直接接続されている状態) に初期化する。 シングルユーザ
       モードを抜ける際には、  次回のシングルユーザモードセッションでも同じ設定を利用できるよう、
       コンソールの ioctl の状態を /etc/ioctl.save ファイルに保存する。

       初めてマルチユーザモードに入るとき、  initboot エントリと bootwait エントリを実行し、
       ユーザがログイン可能となる前にファイルシステムをマウントできるようにする。  そして、ランレ
       ベルにマッチする全てのエントリを処理する。

       新たなプロセスを起動するとき、 init はまず /etc/initscript ファイルが存在するかを調べ、 存
       在する場合はそのスクリプトを用いてプロセスを起動する。

       子プロセスが終了するごとに、   init    はその旨と終了した理由とを、    /var/run/utmp/var/log/wtmp とに記録する (ただしこれらのファイルが存在する場合)。

ランレベルの変更

       指示された全てのプロセスを生成すると、init は 子孫のプロセスが死ぬか、powerfail シグナルが
       発せられるか、 telinit からランレベルを変更せよとのシグナルが送られるまで待機する。 この 3
       つのいずれかが起きた場合は、  init/etc/inittab ファイルを再度調べる。 このファイルに
       は、いつでも新たなエントリを追加できる。 しかし、上の 3 条件のどれかが起きるまでは、  init
       は待機状態を続ける。  新たなエントリを即座に反映させるには、 telinit Q または q コマンドを
       用いて init を目覚めさせ、 /etc/inittab ファイルを再度調べさせればよい。

       シングルユーザモードにない時に init が powerfail シグナル (SIGPWR)  を受け取ると、init/etc/powerstatus  ファイルを読み込む。  そしてこのファイルの内容に基づいてコマンドを実行す
       る。

       F(AIL) 電源供給が途絶え、UPS が電源を供給している。 powerwait エントリと powerfail  エント
              リを実行する。

       O(K)   電源供給が回復している。powerokwait エントリを実行する。

       L(OW)  電源供給が途絶え、UPS  のバッテリー容量が少なくなっている。 powerfailnow エントリを
              実行する。

       /etc/powerstatus が存在しないか、その内容が F, O, L のいずれでもない場合、 init は F  を読
       み込んだものとして動作する。

       SIGPWR/etc/powerstatus の利用は推奨されない。 init と通信したい場合は、 制御チャネル
       /dev/initctl を使うべきである。 これに関する詳しい記述は、 sysvinit パッケージのソースコー
       ドを参照すること。

       init は、ランレベルを変更するよう要請を受けると、 まず新たなランレベルでは定義されていない
       全てのプロセスに対して 警告シグナル SIGTERM を送る。 その後 5 秒間待機してから SIGKILL  シ
       グナルを送り、それらのプロセスを強制的に終了させる。  init は、 これら全てのプロセス (およ
       びそれらの子孫) の属するプロセスグループが、 もともと init  が彼らのために生成したものと同
       じであると仮定している。  あるプロセスが自分のプロセスグループ属性を変えてしまった場合は、
       上記のシグナルを受け取らない。  したがって、そのようなプロセスは別の方法で終了させる必要が
       ある。

telinit

       /sbin/telinit/sbin/init にリンクされている。 /sbin/telinit は一文字の引数を受け取り、
       init にシグナルを送って適切な動作を行なわせる。 telinit への指示には、  以下に示すような引
       数が利用できる。

       0,1,2,3,4,5,6
              指定されたランレベルに変更するよう init に伝える。

       a,b,c  /etc/inittab  中で、ランレベル  a,  b, c のいずれかを含むエントリだけを実行するよう
              init に伝える。

       Q または q
              /etc/inittab ファイルを調べ直すよう init に伝える。

       S または s
              シングルユーザモードに切り替えるよう init に伝える。

       U または u
              (状態はそのままで) 自分自身を再実行するよう init に伝える。 /etc/inittab は調べ直さ
              ない。 ランレベルは Ss12345 のいずれかでなければならない。 それ以外の場合は、この要
              求は黙って無視される。

       init がプロセスに TERM シグナルを送ってから KILL シグナルを送るまでの時間を、telinit  から
       指示することもできる。  デフォルトでは 5 秒に設定されているが、-t sec オプションで変更でき
       る。

       telinit は適切な特権を持ったユーザのみが実行できる。

       init のバイナリは、自分の プロセスID を見て、 自分が init  なのか  telinit  なのかを判断す
       る。  本物の  init のプロセス ID は常に 1 である。 よって、telinit を起動するかわりに init
       を起動しても構わない。

環境変数

       init は子プロセスに以下のような環境変数を設定する:

       PATH   /usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin

       INIT_VERSION
              名前の通り。 あるスクリプトが  init  により直接実行されたのかどうかを見分けるのに便
              利。

       RUNLEVEL
              システムの現在のランレベル。

       PREVLEVEL
              直前のランレベル (ランレベルを変更した場合に便利)。

       CONSOLE
              システムコンソール。これは実際はカーネルから継承したものである。 しかしこれが設定さ
              れていなかった場合は、 init はデフォルトで /dev/console を設定する。

ブートフラグ

       ブートモニタ (例えば LILO) から init に様々なフラグを渡すことが可能である。 init  は以下の
       ようなフラグを受け付ける:

       -s, S, single
            シングルユーザモードでブートする。  このモードでは /etc/inittab を参照する。 またシン
            グルユーザモードのシェルが起動される前に ブートアップ rc スクリプトが実行される。

       1-5  ブート時に入るべきランレベル。

       -b, emergency
            他の起動用スクリプトは実行せず、 直接シングルユーザシェルへとブートする。

       -a, auto
            LILO ブートローダは、 デフォルトのコマンドラインで (ユーザの介入なしに)  カーネルを起
            動すると、   コマンドラインに単語   "auto"   を追加する。  init  はこの単語を見つける
            と、"AUTOBOOT" 環境変数を "yes" に設定する。 ただしこの機能をセキュリティの判断には使
            えない。  あたりまえだが、 ユーザーは "auto" や -a を手動でコマンドラインに追加するこ
            ともできる。

       -z xxx
            -z の引数は無視される。  これを使うとコマンドラインが少し長くなるので、  そのためにス
            タックを若干余分に使用するようになる。  すると  init にコマンドラインを操作し、 ps(1)
            に現在のランレベルを表示させるようにできる。

インターフェース

       init はメッセージのやりとりのために、 /dev にある FIFO である /dev/initctl を listen  して
       いる。 telinit はこれを用いて init と通信する。 このインターフェースは十分に文書化されてい
       ない。  興味を持った人は、init  のソース  tar  アーカイブの  src/   サブディレクトリにある
       initreq.h を調べてほしい。

シグナル

       init はいくつかのシグナルに反応する。

       SIGHUP
            init  は /etc/initrunlvl/var/log/initrunlvl を探す。 もしこれらのどちらかのファイ
            ルがあり、 ランレベルが ASCII コードで書かれていたら、 init  はそのランレベルに切り替
            わる。  これは過去との互換性のためだけに存在する!  通常の場合 (これらのファイルがない
            場合)、 init は telinit q が実行されたときと同じ動作をする。

       SIGUSR1
            このシグナルを受け取ると、init は制御用 FIFO である /dev/initctl を一旦クローズして再
            オープンする。 ブートスクリプトが /dev を再マウントした時に便利である。

       SIGINT
            通常、カーネルは  CTRL-ALT-DEL  が押されるとこのシグナルを  init  に送る。 これにより
            ctrlaltdel アクションが実行される。

       SIGWINCH
            カーネルは KeyboardSignal キーが押されるとこのシグナルを送る。  これにより  kbrequest
            アクションが実行される。

準拠

       init   は   System   V   の   init   と互換である。  init/etc/init.d  ディレクトリや
       /etc/rc{runlevel}.d ディレクトリのスクリプトと密接に連係しながら動作する。  あなたのシステ
       ムがこの規則に従っているなら、 /etc/init.d ディレクトリに README があり、 スクリプトがどの
       ように動作するかが説明されているはずである。

ファイル

       /etc/inittab
       /etc/initscript
       /dev/console
       /etc/ioctl.save
       /var/run/utmp
       /var/log/wtmp
       /dev/initctl

警告

       init は、 生成したプロセスとその子孫とが、  それらのために作ったプロセスグループに留まって
       いると仮定している。  プロセスグループが元々のものと変わっている場合は、 init はそのプロセ
       スを kill できないので、 異なる二つのプロセスが同一の端末ラインから入力を読み込む、 といっ
       た現象が起きてしまう可能性がある。

返り値

       init  は、あるエントリが 2 分間に 10 回以上繰り返して再生成されるのを発見すると、 コマンド
       文字列に誤りがあるとみなし、 システムコンソールにエラーメッセージを表示し、 5 分以上経過す
       るかシグナルを受け取るまで、  それ以上そのエントリの再生成を拒否する。  こうすることによっ
       て、/etc/inittab 中に書き間違いがあったり、 そのエントリで使用するプログラムが削除されてい
       る場合に、 システム資源を使い尽くしてしまうことを防いでいる。

著者

       Miquel   van   Smoorenburg  (miquels@cistron.nl)。  もとの  man  ページは  Michael  Haardt
       (u31b3hs@pool.informatik.rwth-aachen.de) による。

関連項目

       getty(1), login(1), sh(1), runlevel(8), shutdown(8), kill(1),  inittab(5),  initscript(5),
       utmp(5)

                                          23 August 2001                                  INIT(8)