もし ttys(5) ファイルの console のエントリが ``insecure'' にマークされていた場合には、 はシングルユーザモードのシェルを起動する前に、スーパユーザのパスワードを 要求します。 パスワードチェックは、 console が ``secure'' にマークされていればスキップされます。
カーネルは 4 種類のセキュリティレベルで走行します。どのスーパユーザ プロセスもセキュリティレベルを上げることができますが、レベルを下げることが できるプロセスはありません。 セキュリティレベルは以下のように定義されます:
更に、カーネル時間の変更は 1 秒以内に制限されています。 これ以上変更しようとすると、 ``Time adjustment clamped to +1 second'' というメッセージをログします。
初期のセキュリティレベルが非 0 だった場合、 はセキュリティレベルを変更しません。 それ以外の場合、 は、最初にレベル 1 に上げます。 レベルは減らすことはできませんので、 その後の操作においてはレベルは最低 1 であり、 これはシングルユーザモードに戻る場合においても成立ちます。 マルチユーザモードにおいてレベル 2 で システムを走らせたい場合は、シングルユーザの状態の間に、 sysctl(8) を使って、変数 kern.securelevel に必要なセキュリティレベルの値を設定します。
が jail 中で実行される場合、 ``ホストシステム'' のセキュリティレベルは影響しません。 jail をサポートするためにカーネル中に設定される情報の一部に、jail 毎の ``セキュリティレベル'' 設定があります。 これにより、ホストシステムよりも高いセキュリティレベルで jail 内を実行することが可能となります。 jail に関する更なる詳細は jail(8) を参照してください。
マルチユーザモードの場合、 は ttys(5) ファイルで指示された端末ポートのためのプロセスを管理します。 ユーティリティはこのファイルを読み込み、 2 番目のフィールドに指示されたコマンドを 実行します。 ただし、1 番目のフィールドが /dev 中のデバイスを参照し、そのデバイスが設定されていない場合は例外です。 1 番目のフィールドは、コマンドへ渡される最後の引数になります。 そのコマンドは通常、 getty(8) で、 getty は tty をオープン、初期化し、 login(1) プログラムを実行します。 login プログラムは、ユーザがログインするとシェルを起動します。 ユーザがログアウトするか異常終了するなどして、そのシェルが終了すると、 ユーティリティが起こされ、 utmp(5) ファイルからユーザを消し、 wtmp(5) ファイルにログアウトを記録します。 このサイクルは、 プログラムがその端末に新しい getty を実行することで繰り返されます。
ユーティリティは任意のデーモンを走行させ続けるためにも使用可能であり、 デーモンが死んだ場合には自動的に再開します。 この場合、 ttys(5) ファイルの 1 番目のフィールドは、 設定されたデバイスノードへのパスを参照してはならず、 デーモンに対する最後のコマンドライン引数として渡されます。 これは AT&T System V /etc/inittab にある機能と同様です。
ラインの状態 (on, off, secure, getty, ウィンドウの情報) は、 ttys(5) ファイルを書き換えて ``kill -HUP 1 '' によってシグナル SIGHUP を に送ることで、リブートせずに変更できます。 このシグナルを受け取ると は ttys(5) ファイルを再度読み込みます。 ttys(5) でラインがオフにされると、 はそのラインに関係するセッションの制御プロセスに SIGHUP シグナルを送ります。 オフであったラインが ttys(5) ファイルでオンにされると、 は 2 番目のフィールドで指定されるコマンドを起動します。 ラインのコマンドやウィンドウフィールドが変更された場合、その変更は現在 のログインセッションが終了するまで有効にはなりません。 (例えば、 によって新しいプロセスが起動されるまで有効にならない。) ttys(5) 中のあるラインをコメントアウトあるいは削除した場合は、 はそのラインに関しては何も実行しません。 しかしこの場合、 ttys(5) ファイルと utmp(5) ファイル内の記録情報が一致しなくなるため、試すことはお勧めしません。
``kill -TERM 1 '' などによって terminate シグナル (TERM ) を受けると、 ユーティリティはマルチユーザモードを終了し、シングルユーザモードに復帰します。 ハードウェアまたはソフトウェアの問題でデッドロックしたプロセスがある場合、 init はすべてのプロセスの終了を待たず (これは無限に終らないかも知れません)、 30 秒間でタイムアウトして警告のメッセージを出力します。
terminal stop シグナル (TSTP ) を送ると ( ``kill -TSTP 1 '' )、 ユーティリティは新しい プロセス を起動するのをやめ、徐々にシステム停止可能な状態にします。 その後、hangup シグナルで完全なマルチユーザモードに戻り、terminate シグナル でシングルユーザモードに移ります。 この hook は reboot(8) と halt(8) で使われています。
interrupt シグナル (INT ) を送ると ( ``kill -INT 1 '' )、 ユーティリティはすべてのプロセスを (デッドロックプロセスを待たずに) 終了させ、 リブートを実行します。 この操作は、マシンがハングした時に、カーネルの中から、あるいは、X から、 システムを安全にシャットダウンするのに便利です。
ユーティリティは同様に、ユーザ定義シグナル 1 (USR1 ) を送られた場合はマシンを停止し、 ユーザ定義シグナル 2 (USR2 ) を送られた場合はマシンを停止してから電源を切ります (ハードウェアが許す場合)。
マシンをシャットダウンする時、 は /etc/rc.shutdown スクリプトを実行しようとします。 このスクリプトは innd (インターネットニュースサーバ) のような特定のプログラムを綺麗に終了させるために使用可能です。
の役割は非常に重要で、もし が死ぬとシステムが自動的にリブートされます。 もしブート時に プログラムを見つけられなければ、システムは ``panic: init died (signal %d, exit %d)'' のようなメッセージを出力して panic で終了します。
2 番目の書式行のようにユーザプロセスとして実行する場合、 は AT&T System V の動作をエミュレートします。すなわち、スーパユーザがコマンドラインで ランレベル を指定可能であり、 はオリジナルの (PID 1) に次のようなシグナルを送ります:
ブートシーケンスにおいて、セキュリティレベルを 1 より高く設定するのが あまりにも早すぎると、 fsck(8) が一貫性のないファイルシステムを補修することを妨げてしまう可能性があります。 セキュリティレベル設定を行う場所として適切なところは、 全てのマルチユーザ立ち上げ処理が完了した後である、 /etc/rc の末尾です。