INIT(8) — NEWS-OS Programmer’s Manual
名称
init − プロセスコントロール初期化
形式
/etc/init
解説
init は、ブート手続きの最終段階としてカーネル内で呼び出されます。 通常、 init は reboot(8) 内の記述に従って自動リブートシーケンスを実行し、 成功すると、マルチユーザオペレーションを開始します。 リブートに失敗した場合は、 コンソール上にスーパーユーザシェルを起動することにより、 シングルユーザオペレーションを開始します。 直ちにシングルユーザオペレーションが始められるように、 ブートプログラムから init へパラメータを渡すこともできます。 このようなシングルユーザオペレーションが、 シングルユーザシェルを殺すことによって (すなわち ^D を叩くことによって)終了させられた場合には、 init がリブートパラメータなしで /etc/rc を実行します。このコマンドファイルは、一時ファイルの除去、 ファイルシステムのマウント、デーモン(daemon)の起動といった、 初期設定操作を行います。
マルチユーザオペレーションでは、 init の役割は、ユーザがログインできるように各端末ポートのための プロセスを生成することです。このような操作をするために、 init はファイル /etc/ttys を読み、ファイル内に指定された各端末用のコマンドを実行します。 このコマンドは通常、 /etc/getty です。 getty は端末の回線をオープンして初期化し、ユーザ名を読み、 login を呼び出してユーザをログインさせ、シェルを実行します。
最後にシェルは、明示的にタイプされる またはハングアップによるエンドオブファイルによって、 終了します。 このイベントを待っていた init のメインパスが起動し、ファイル utmp から現在のユーザを記録しているエントリを削除し、 /usr/adm/wtmp にログインとログアウトの履歴を持つエントリを作ります。 wtmp エントリは、ユーザが回線上にログインできた場合にのみ作られます。 その後、適切な端末が再オープンされ、 getty が呼び出されます。
init は ハングアップシグナルを受け取ると、ファイル /etc/ttys を再読み出ししなくてはならないと解釈します。 ttys 上で、以前はアクティブであったが現在はそうでなくなった各回線上の シェルプロセスは終了され、追加された各回線については 新しいプロセスが生成されます。 ファイル中で変更のなかった回線については、 そのまま何もされません。このため、 ttys ファイルを変更し、‘kill −HUP 1’を使って ハングアップシグナルを init プロセスに送ることによって、 システムをリブートせずに端末回線を ドロップしたり追加したりすることが可能です。
終了(TERM)シグナル、すなわち“kill −TERM 1”が送られると、 init はマルチユーザオペレーションを終了し、シングルユーザモードに戻ります。 もしデッドロック状態になっていて (ハードウェアかソフトウェアの間違いによって)未解決のプロセスがあれば、 init はそれら全部が死ぬのを待たず(永遠に待ちつづける可能性があるので)、 30 秒後にタイムアウトし、警告メッセージを印刷します。
端末停止(TSTP)シグナル、すなわち“kill −TSTP 1”が送られると、 新しい getty の生成を中止し、システムを徐々に停止させます。 この後、 ハングアップ(シグナル)で完全なマルチユーザオペレーションに戻り、 また終了(シグナル)でシングルユーザシェルを初期化します。 このしかけは、 reboot(8) と halt(8) で使用されます。
init の役目は非常にきわどいので、もしそれが死ぬと、 システムは自分自身で自動的にリブートします。
診断
/etc/getty gettyargs failing, sleeping
回線をサービスするために起動されるプロセスが、起動するたびにすぐ終了します。 これは、呼び出し音や、ノイズが多い端末回線が原因でよく起こります。 init は 30 秒スリープし、プロセスの起動を続けます。
WARNING:Something is hung(wont die);ps axl advised.
プロセスがハングしていて、 システムの停止時に殺せません(killできない)。 これは通常、デバイスエラーの状態が続いているために、 プロセスがデバイスドライバに引っかかっているのが原因で起こります。
関連ファイル
/dev/console, /dev/tty∗, /etc/utmp, /usr/adm/wtmp, /etc/ttys, /etc/rc
関連事項
login(l), kill(l), sh(1), ttys(5), getty(8), rc(8), reboot(8), halt(8), shutdown(8)
NEWS-OSRelease 4.1C