その中に すべてのLinuxプロセスの親です。これは、コンピュータの起動時に開始する最初のプロセスで、システムがシャットダウンするまで実行されます。それは他のすべてのプロセスの祖先です。
主な役割は、/ etc / inittabファイルに格納されたスクリプトからプロセスを作成することです。このファイルには通常、ユーザがログインできる各行にInitを生成させるエントリが格納されます。また、特定のシステムで必要となる自律プロセスも制御します。
ランレベル
A ランレベル 選択されたプロセスグループのみを実行できるようにするシステムのソフトウェア構成です。 initによって生成されたこれらのランレベルのプロセスは、/ etc / inittabファイルで定義されます。 Initは8つのランレベル(0〜6、Sまたはs)のいずれかになります。ランレベルは、特権ユーザーがTelinitを実行することによって変更されます。Telinitは適切なシグナルをInitに送信し、変更するランレベルを通知します。
ランレベル0,1、および6は予約されています。ランレベル0はシステムの停止に使用され、ランレベル6はシステムの再起動に使用され、ランレベル1はシステムをシングルユーザーモードにするために使用されます。ランレベルSは、直接使用されるのではなく、ランレベル1に入るときに実行されるスクリプトによって使用されます。
ランレベル7〜9も有効ですが、伝統的なUnixのバリアントはそれらを使用していないため、十分に文書化されていません。ランレベルSとSは同じです。内部的には、同じランレベルのエイリアスです。
ブート
Initがカーネルブートシーケンスの最後のステップとして呼び出された後、/ etc / inittabファイルを探して、そのタイプのエントリがあるかどうかを調べます initdefault 。 initdefaultエントリは、システムの最初のランレベルを決定します。そのようなエントリがない場合(または/ etc / inittabがまったくない場合)は、ランレベルをシステムコンソールに入力する必要があります。
ランレベルSまたはsはシステムをシングルユーザーモードにし、/ etc / inittabファイルは必要ありません。シングルユーザーモードでは、ルートシェルが/ dev / consoleにオープンされています。
シングルユーザモードに入ると、initは/etc/ioctl.saveからコンソールのioctl状態を読み込みます。このファイルが存在しない場合、initは9600ボーとCLOCAL設定で回線を初期化します。 initがシングルユーザーモードを終了すると、コンソールのioctl設定がこのファイルに保存されるので、次のシングルユーザーセッションで再利用できます。
初めてマルチユーザモードに入ると、Initはbootとbootwaitエントリを実行して、ユーザがログインする前にファイルシステムをマウントできるようにします。その後、ランレベルに一致するすべてのエントリが処理されます。
新しいプロセスを開始するとき、Initは最初にファイル/ etc / initscriptが存在するかどうかをチェックします。存在する場合は、このスクリプトを使用してプロセスを開始します。
子が終了するたびにInitは、これらのファイルが存在する場合、/ var / run / utmpおよび/ var / log / wtmpにある事実とその理由を記録します。
ランレベルの変更
指定されたすべてのプロセスが起動すると、Initは子孫プロセスの1つが死ぬのを待つか、パワーフェイルシグナルか、Telinitによってシステムのランレベルを変更するように通知されます。これらの3つの条件のいずれかが発生すると、/ etc / inittabファイルが再検査されます。新しいエントリはいつでもこのファイルに追加できます。しかし、initは上記の3つの条件の1つが発生するのを待ちます。瞬間的な応答を提供するために、Telinit QコマンドまたはqコマンドはInitを起床して/ etc / inittabファイルを再検査することができます。
Initがシングルユーザーモードでなく、電源異常信号(SIGPWR)を受信すると、/ etc / powerstatusファイルが読み込まれます。次に、このファイルの内容に基づいてコマンドを開始します。
- 失敗します):電源が落ちている、UPSが電源を供給しています。 powerwaitとpowerfailエントリを実行します。
- OK):電源が復元され、powerokwaitエントリを実行します。
- L(OW):電源が落ちていて、UPSのバッテリが少なくなっています。 powerfailnowエントリを実行します。
/ etc / powerstatusが存在しないか、F、O、L以外の文字を含む場合、Initは文字Fを読み取ったかのように動作します。
SIGPWRと/ etc / powerstatusの使用はお勧めしません。 Initと対話したい人は誰でも/ dev / initctl制御チャネルを使うべきです。
Initがランレベルの変更を要求されると、新しいランレベルで定義されていないすべてのプロセスに警告信号SIGTERMが送信されます。その後、SIGKILL信号を使用してこれらのプロセスを強制終了する前に、5秒待機します。 Initは、これらすべてのプロセスとその子孫が、Initが最初に作成したのと同じプロセスグループに残っていることを前提としています。いずれかのプロセスがプロセスグループ所属を変更した場合、これらのシグナルは受信されません。そのようなプロセスは別々に終了する必要があります。
Telinit
Telinitは/ sbin / initにリンクされています。これは1文字の引数をとり、適切なアクションを実行するためにInitを通知します。以下の議論は、Telinitへの指令として役立ちます。
- 0,1,2,3,4,5または6:指定した実行レベルに切り替えるようにInitに指示します。
- a、b、c:ランレベルa、b、またはcを持つ/ etc / inittabファイルエントリのみを処理するようにInitに指示します。
- Qまたはq:/ etc / inittabファイルを再検査するようにInitに指示します。
- Sまたはs:シングルユーザーモードに切り替えるようにInitに指示します。
- Uかu:initに自身を再実行するように指示します(状態を保持します)。 / etc / inittabファイルの再検査は行われません。ランレベルはS、s、1,2,3,4または5でなければなりません。それ以外の場合、要求は黙って無視されます。
Telinitはまた、SIGTERMシグナルとSIGKILLシグナルの送信の間にどれくらい待つべきかをInitに伝えることができます。デフォルトは5秒ですが、この値は -t sec オプション。
Telinitは、適切な特権を持つユーザーのみが呼び出すことができます。
Initバイナリは、そのプロセスIDを調べて、InitかTelinitかをチェックします。実際のInitのプロセスIDは常に1です。これにより、Telinitを呼び出す代わりに、Initをショートカットとして使用することができます。




