追加読書

追加読書

~からオペレーティングシステムがシャットダウンしたら、サービス管理者はSIGTERMとSIGKILLをそのサービスに送信する必要があることをどのように知ることができますか?

systemdは初期化マネージャーでありサービスマネージャーです。

「初期化」と「サービスマネージャ」の違いは何ですか?

私の考えでは、両方とも同じように見えますか?

「サービスマネージャ」の代わりに「init」の例はありますか?その反対?

ありがとうございます。

答え1

initプロセス#1で実行されるプログラムの一般的な名前。これは長年にわたってさまざまな形をとってきましたinit。混乱することは、管理者がプロセス#1と通信するために使用するコマンドの名前でもあります。それらは2つの異なるものとして最もよく見ることができ、AT&T Unixでは確かにそのように文書化されています。一部のソフトウェアでは、見つかったプロセスIDに応じて異なる動作を持つすべてのプログラムが混在していますが、状況をさらに混乱させるために、プロセス#1はシステムの存続期間中に複数の異なるプログラムを実行することがinitでき/initます/sbin/init。 、通常電子で接続されています)。

サービスマネージャ名前が示すように、サービスを管理するプログラムです。実際、長年にわたって広範なオペレーティングシステムソフトウェアでプロセス#1として実行される必要はありません。一般的にそうではありませんプロセス #1.サービスマネージャにはGerrit Papeが含まれます。runsvローラン ベルコート(Laurent Belcote)s6-supervise想像の中の名前までservice-manager私のおやつに。 AT&T Unix System 5 Release 4用のサービスアクセスツール、IBM AIX 3.1用のシステムリソースコントローラ、Solaris用のサービス管理ツールも含まれています。これは、統合され、一貫性があり、既知のコンテキストでサービスプログラムを生成し、これらのサービスを制御(開始、終了、再起動、およびキャンセル)し、残りのシステムが状態を照会するためのメカニズムを提供します。

システム管理者システムを管理し、システム状態の変化を処理するプログラムです。それは一般的ですはいプロセス#1として実行します。これは部分的にオペレーティングシステムのカーネルがこれを特別に処理し、停電イベントやカーネル仮想端末キーボードデバイスの特殊キーコード(Linux + または + + 生成プロセスで生成されたキーコードなど)のシステム状態変更要求に関する情報を提供します。送るからです。 #1)。また、起動時に初期システム状態を設定し、時にはシャットダウン時にシステム状態を終了する役割も担います。SIGWINCHSIGINT

システム状態の詳細はソフトウェアによって異なります。 van Smoorenburgはinit(現在は使用されていない)ランレベルの面で動作します。 BSDinitのステートマシンは完全に内部的で、次の状態を持ちます。走る/etc/rcマルチユーザーシングルユーザー

例示的な研究:

  • systemdプロセス#1プログラムです。 1 つのプログラムでサービス管理とシステム管理を実行し、そのプロセスとして実行されます。ただし、システム状態の仕上げを処理せずに、代わりにプロセス#1systemd-shutdownそのような理由で。システム状態の変更は通常、サービスマネージャの起動/停止の形式です。ターゲットこれにより開始/停止が発生します。提供するemergency.serviceたとえば、一部のサービスはアクティブsystemd-halt.serviceになるとそれ自体で実行され、追加のsystemctlシステム状態を変更するためにプロセス#1にコマンドを返します。この設計では、終了は2つの状態シーケンスです。
  • 想像の中の名前system-manager私のNosh Toosetには、システム管理者の役割のみを実行するプロセス#1プログラムがあります。起動時に初期化され、終了時に完了します。 (システム全体)サービスマネージャを作成してシステムを管理します。別のプロセスとしてそして様々な通貨system-controlイベントに応答するプログラム。 (たとえば、KVTキーボードの++コードをSIGINT使用すると、実行するサブプロセスが生成されます。)サービスマネージャにコマンドを実行して、サービスとターゲットを起動および停止します。同様に、複数のサービス/ターゲット呼び出しはコマンドを再送信します。system-control start secure-attention-keysystem-controlsystem-controlシステム管理者は、アクティブになると追加のシステム状態の変更を要求できます。サービスプロセスはプロセス#1の孫です。
  • runitシステム管理のみを実行するプロセス#1プログラム。他のプロセスと同様に、サービスマネージャを作成します。これはシェルスクリプトを呼び出すことによって行われます。 runitの人々はこれを「ステップ2」と呼び、チェーンにロードされます。runsvdirこれは次にrunsvプロセス#1の孫として複数のプログラムを生成する。サービスプロセスはプロセス#1の子孫です。システム管理は、シグナルとフラグファイルの組み合わせによってトリガーされる「3つのシェルスクリプトのみを実行する」アプローチを使用します。
  • システム5initは、システム管理のみを実行するプロセス#1プログラムです。前述のシステム状態ランレベルがあり、理論的にはサービス管理者でもあります。実際には、サービス管理機能があまりにも悪く、数年が経つと、TUIログインサービスの管理にも使用されなくなります。これは、前述のSAFおよびSRC形式のサブプロセスとして(より強力な)サービスマネージャを作成します。

    1990年には、使用中のランレベルの数が1に減り、system-manager数十年後に実際にはnoshとほぼ同じデザインが誕生しました。プロセス#1は、主にService Managerサブプロセスを生成し、カーネルイベントに応答してコマンドを実行するためのより多くのサブプロセスを生成しました。管理者コマンド。サービスプロセスは、プロセス#1の子孫であり、さまざまなサービスマネージャプロセスの孫であり子プロセスです。 (TUIログインサービスプロセスは、たとえばプロセス#1で作成されttymonたプロセスで作成されますsac。)

  • van Smoorenburgは、前述のSystem 3およびSystem 5がリリースされる数年前のUnixサービスマネージャと同じですinit。これはシステム管理者として機能し、一部のサービスも管理するプロセス#1プログラムです(たとえ機能が少ない方法ですが、システム5などの個々のサービスの起動/停止をきめ細かく制御することはできません)。サービス管理は、実際に実行されている場合(サービスプログラムをフォークしてほとんど忘れないでください)、子プロセスの他のプログラムで行われます。initinitinit

    systemdNosh ツールセットとは異なり、system-manager一部のシステム管理タスクは子プロセスで実行されるプログラムに委ねられます。どちらも、プロセス#1systemdでシステムの電源を切る/再開/停止する(カーネルの適切なシステムコールを実行する)最後の操作を実行していますsystem-manager(他のプログラムではsystemdの場合にもかかわらず)、van Smoorenburgシステムはこれを行います。呼び出して子プロセスで実行されますrc。たとえば、システムを停止するための最終システム呼び出しは、haltサブプロセスrc(プロセス#1のサブプロセス)として実行されるシェルスクリプトによって実行されます。haltプログラムを順次実行(プロセス#1の子孫として)実際にシステムコールを実行します。

追加読書

答え2

これは非常に良い質問ですが、すぐに答えられる質問ではありません。私の答えは「はい」ですジェイドBPの。

「初期システム」について話すとき、実際には4つの異なることについて話しています。下記をご覧ください。実際には、関連する概念を区別するのに時間がかかる人はほとんどいないので、これは混乱した領域です。時には用語に同意しない人もいます。 :-)

たとえば、ジョナサンは電話をかけます。サービスマネージャ、私が呼ぶものプロセス監督システムは、サービスではなくプロセスを管理するためです。より正確には抽象化(「サービス」)を提供します。長距離ランニングサービス、つまりデーモンによって実装されたサービス)ユーザーが解決できるように、対応する抽象化(プロセス)の実装を非表示にします。提供する変えるプロセス

ジョナサンが呼ぶシステム管理者、私が呼ぶものサービスマネージャ実際にはサービスを開始および停止するツールなので、サービスを管理することもできますが、システムのグローバル状態を処理するツールなので、「システム管理者」という用語も意味があります。むしろマシンステータスマネージャ。それにもかかわらず、私たちはこれらの用語に同意する必要があり、これは混乱を減らすのに大きな助けになります。

では、初期化システムとは何ですか?実際には4つです。

  • コンピュータの起動時に実行される最初のプログラムです。伝統的に名前はとして指定されており、/sbin/initこれが私がこのプログラムを扱うときに使用する用語です。
  • 実行に長い時間がかかるプログラムプロセス番号1ほとんどの機械寿命の間。他のプログラムで実行できる/sbin/initため、同じ場合も異なる場合もあります。/sbin/initsysvinit または systemd の場合、プロセス番号1はい/sbin/init。 s6 ベースのシステムには該当しません。
  • プロセス監督システム。これは基本的にデーモンが死んだときに再起動するためのシステムであり、pidが何であってもデーモンの現在の化身を解決するツールです。初期化システムの場合、少なくとも1つのプロセスにこの属性が必要です。それ以外の場合は、システム内のすべてのプロセス(保存)プロセス番号1)が終了し、マシンが利用できなくなり、コンソールから再起動する必要があります。
  • マシンステータスマネージャ(あいまいな用語を避けるため)。ソフトウェアは、コンピュータの状態を「すべてがダウンしている」から「私が望むすべてのサービスが動作している」に変更することができ、コンピュータの実行中に実行中のサービスセットを変更してシャットダウンをトリガーすることもできます。

これはinitシステムの4つの重要な部分です。それでは、既存の初期化システムはどのように機能しますか?

  • sysvinitは/sbin/initプロセス番号1、非常に初歩的な監督システム(の行を通して実装されている/etc/inittab)、マシンステータスマネージャ。 sysvinitを使用するディストリビューションは通常、sysv-rc(既存のシェルスクリプトセット)またはOpenRCを次のように使用します。マシンステータスマネージャ
  • オープンRCはマシンステータスマネージャ。最新バージョンは基本機能も提供します。監督システム。しかし提供してい/sbin/initないプロセス番号1:OpenRC自体は初期化システムではありません。
  • systemdは単一のプロセスで4つの要素をすべて提供します。はい。 systemdは両方とも「init」です(/sbin/initどちらも意味できます)。プロセス番号1または両方)そして「サービスマネージャ」とは「サービスマネージャ」を意味しますか?監督システムまたはマシンステータスマネージャ
  • すべてのdaemontoolsに似たメソッドは基本的に監督システム走るまた/sbin/initプロセス番号1s6提供プロセス番号1、しかしいいえ/sbin/init、しかしs6-Linux-初期化パッケージは次の/sbin/init方法を提供しません。マシンステータスマネージャしかし、s6はそのような管理者のためのフックを提供し、2つが書かれています。s6-rcそしてアノパ
  • おやつ4つの要素をすべて別々のプロセスとして提供します。ジョナサンは私よりもそれについてもっと話すことができます。 :-)
  • 他のinitシステム(busybox init、BSD init、launchd、Epochなど)を見るときは、次のように考えることをお勧めします。このinitはどのような要素を提供しますか?何が欠けていますか?

この記事で簡単にまとめることができるものを説明する15分間のビデオと、initシステムのしくみについて詳しく説明するより大きなスライドセットがあります。これらの内容はすべて以下にあります。FOSDEM 2017アーカイブ。自由に探索してみてください。あなたがこれらのことに興味があれば、私たちはメーリングリストの監視

楽しむ、

答え3

init(通常)システムによって開始された最初のプロセスです。以下を含むがこれらに限定されないいくつかの特別な責任があります。

  • 起動プロセスを完了するために必要な他のユーザースペースプロセスを起動します。
  • システムの最終シャットダウンを処理します(initユーザースペースのすべてのエントリが終了すると、最終的にカーネルに電源を切るか再起動するように求められます)。
  • 孤児プロセス(もはや実行されている親プロセスがないプロセス)をインポートしてクリーンアップします。

一方、サービス管理者は、特定のサービスセットが実行されていることを確認し、オプションでサービスが継続的に実行されていることを確認する役割のみを担当します。これを達成する正確な方法は、単にサービス間の依存関係を追跡する基本的なスクリプトから、依存関係を自動的に管理する複雑なシステムまでさまざまです。

もともとSVR4の実装(クラシックパッケージ、Busyboxアプレット、ほとんどのLinuxディストリビューションのBSD、およびSolarisプログラムの基盤init)には、基本的なサービス管理が含まれていました。起動時に自動的に起動し、終了時に再起動するプログラムを定義できます。そのため、基本的なサービス管理者ではなく、UNIXシリーズのシステムで実装を見つけることは実際には困難であり、これらの基本的なレベルのサービス管理は主にプロセスの努力の一部を意味します。systemv-initinitinitinitinit

一方、実装ではなくサービスマネージャを簡単に持つことができますinit。クラシックBSDスクリプトは、rc.dLinuxの概念の基礎を形成する非常に単純なサービスマネージャ(サービスの起動と停止を処理し、基本的な依存関係管理を提供する)の例です。/etc/init.dより洗練された例は、状態追跡、自動再起動機能、警告、およびいくつかのシステム監視サポートを基本機能に追加するmonitです。

関連情報