デーモンとは何ですか?
デーモンは、ユーザーが直接アクセスするのではなく、バックグラウンドで目立たないように実行される、UNIX のような OS 上の一種のプログラムです。特定の条件またはイベントの出現によってトリガーされるのを待ちます。
通常、UNIX 系システムは、主にネットワーク上の他のシステムを介したサービス要求に対応したり、ハードウェア動作に対応したり、他のプログラムにも応答したりするために、多数のデーモンを実行します。
アクティビティへのデーモンを起動する可能性のある条件やアクションの例としては、特定の日付や時刻、指定された時間間隔の経過、特定の通信回線から作成された Web リクエストや電子メールの受信、特定のディレクトリへのファイルの到達などがあります。
パーセイントJava
デーモンがリッスンしていることを条件またはアクションの実行者に知らせる必要はありません。
ただし、プログラムは、暗黙的にデーモンを起動することがわかっているという理由だけで、そのアクションを実装することがよくあります。
デーモンはバックグラウンド プロセスとも呼ばれます。これは、バックグラウンドで実行される UNIX または Linux プログラムです。ほとんどすべてのデーモンには、文字「d」で終わる名前が含まれています。たとえば、SSH リモート アクセスの接続を管理する sshd、または Apache サーバーを管理する httpd デーモンです。多くの場合、Linux は起動時にデーモンを開始します。
/etc/init.d ディレクトリ内に各種シェルスクリプトが保存されます。これらのスクリプトは、デーモンの起動と停止に使用されます。
Linux プロセス
通常、デーモンはプロセスとしてインスタンス化されます。これらのプロセスは、プログラムの実行中または実行中のインスタンスです。プロセスはオペレーティング システムの中核であるカーネルによって処理され、すべての特別なプロセス識別番号が割り当てられます。
Linux には、主に次の 3 種類の一般的なプロセスがあります。
- バッチ
- 相互の作用
- デーモン
バッチ プロセスはプロセス キューを通じて送信され、コマンド ラインとは関係ありません。これらのプロセスは、システムの使用率が低い場合に繰り返し操作を実行するのに適しています。
対話型プロセスは、ユーザーがコマンド ライン上で対話的に実行します。
デーモンは、親プロセスに PID 1 が含まれるプロセスと同様のシステムによって識別されます。
常に、プロセスの初期化を定義します。 init プロセスは、Linux システムの起動時に開始される初期プロセスであり、システムがシャットダウンされるまでシステム上に残ります。
init は、子プロセスのステータスを待たずに親プロセスが終了または終了する任意のタイプのプロセスを採用できます。
したがって、デーモンを起動する基本的な手法は、2 回または 1 回の分割またはフォークを行い、子プロセスがその一般的な機能の実装を開始している間に親プロセスを終了できるようにすることです。
yメールとは何ですか
デーモンの歴史
いくつかのデーモンは、System V の init スクリプトによって公開されます。これらは、システムの起動時に自動的に実行できるスクリプトまたは短いプログラムです。これらは、一定の間隔で再作成されるか、セッション期間中存続する可能性があります。
現在、複数のデーモンは継続的に実行されるのではなく、必要な場合にのみ 1 つのデーモン (xinetd) によって開始されます。 xinetd は TCP/IP スーパーサーバーとして知られています。
これは起動時に開始され、構成ファイル (/etc/xinetd.conf または /etc/inetd.conf) 内にリストされているプロセスに割り当てられているさまざまなポートもリッスンします。
アプリケーション プログラムやオペレーティング システムによって起動されるデーモンを含めて、手動でいくつかのデーモンを起動することもできます。すべてのデーモンには、Linux を含むいくつかの UNIX 系 OS に個別のスクリプトがあり、再起動および終了することができます。
これらのスクリプトの管理は、ランレベルに従って実装されます。ランレベルは、選択した一部のプロセスのみの使用を許可するシステムの動作状態または構成状態として定義できます。個別のランレベルを開始すると、システム エラーの修正など、特定の問題を解決することができます。
Javaオブジェクトの等価性
デーモンのポイント
デーモンのいくつかの重要なポイントを以下に説明します。
- デーモンという言葉は、ギリシャ語の方法論デーモンから取られています。これらは定命の者と神の間に位置し、独特の力や知識を持った超自然的な存在でした。
- 1963 年に、デーモンという用語は、IBM 7094 の助けを借りた先駆的なプロジェクト MAC のシステム コンテキスト内に初めて適用されました。
- これは、異なる速度の分子のソートをサポートし、バックグラウンドで精力的に動作する抽象エージェントであるマクスウェルの熱力学と物理学のデーモンからインスピレーションを得ました。
- その後、この用語は、システムの雑務を実行するバックグラウンドのプロセスを表すために使用されるようになりました。
- 最初のデーモン コンピューターは、テープ バックアップを自動的に作成するプログラムでした。
- この用語はコンピュータの使用に使用されました。これは、Disk and Execution MONitor の略称でした。
- Microsoft Windows オペレーティング システム上でデーモンが機能する、サービスと呼ばれるさまざまなプログラム。ただし、デーモンという言葉はこれらのシステムにも使用されることがあります。
デーモンの実装
Unix のようなシステム
Unix 系システムのプロセスは、その親プロセスが終了するとデーモンとなり、このデーモンは親プロセスとして init プロセス (番号 1 プロセス) に任命され、厳密に技術的な方法で制御端末を含みません。
ただし、デーモンは、init プロセスの子であるかどうかに関係なく、バックグラウンドのプロセスである可能性があります。
プロシージャの基本的なテクニックは、プロシージャがコマンド ライン、またはシステム スターター スクリプトや init スクリプトなどの起動スクリプトを通じて開始されるときに、UNIX などのシステム上のデーモンになります。これには次のことが含まれます。
- 必要に応じて、環境を通じて不要な変数を削除します。
- 終了してフォークすることにより、バックグラウンド タスクとして実行されます。これにより、デーモンの親 (スタートアップまたはシェル プロセス) が終了通知を受信し、通常の実行を継続できるようになります。
- 呼び出しセクションを介したデタッチは、通常、setsid() という個別の操作によって実行されます。
- tty 制御を通じて解離します。
- 新しいセッションを作成し、そのセッションのセッション リーダーになります。
- プロセスグループのリーダーとなる。
- デーモンが新しい tty 制御を継承しないことを確認したい場合、デーモンは終了して再度フォークする可能性があります。これは、新しいセッション内のセッション リーダーではなくなり、tty 制御を継承できないことを意味します。
- 現在の作業ディレクトリをルート ディレクトリとして設定し、プロセスがマウントされたファイル システム上にある可能性のある使用中のディレクトリを取得しないようにします。
- umask を 0 に変更すると、create()、open()、およびその他のオペレーティング システムの呼び出しが許可マスクを容易にし、すべての呼び出し元 umask に依存しなくなります。
- 標準ストリーム (stderr、stdout、stdin) のファイル記述子 0、1、および 2 をログファイルまたは /dev/null にリダイレクトし、親プロセスを通じて取得した他のすべての記述子ファイルを閉じます。
systemd、launchd、inetd などのスーパー サーバー デーモンによってプロセスが開始されると、スーパー サーバーはこのプロセスにこれらの機能を実装します。ただし、systemd で実行するように変換されておらず、マルチスレッドおよび Type=forking データグラム サーバーとして記述されている古いスタイルのデーモンは除きます。 inetd に基づいて。
ロボットのコンポーネント
MS-DOS
デーモンのようなプログラムは、Microsoft DOS プラットフォーム内で終了および常駐 (つまり TSR) ソフトウェアとして実行されました。
Windows NT
Windows サービスとして知られるプログラムは、これらのデーモンの機能を Microsoft Windows NT システムに実装します。これらはプロセスとして実行され、通常はマウス、キーボード、モニターと対話しません。これらは、ブート時にオペレーティング システムの助けを借りて起動される場合があります。
Windows サービスは、コントロール パネル (専用の構成/制御プログラム)、PowerShell スクリプト システム、またはサービス コントロール マネージャーのサービス コントローラー要素である net stop および net start コマンドによって手動で停止、開始、構成されます。
ただし、すべての Windows アプリケーションはサービスと同様にデーモンの役割を実装でき、いくつかの Windows デーモンには通常のプロセスとして実行するオプションが含まれています。
クラシック macOS と Mac OS
さまざまなオプションのサービスと機能は、クラシック Mac OS 上でオペレーティング システムを再構築する起動時にロードされるファイルによって促進されます。
これらはコントロール パネルとシステム拡張機能と呼ばれていました。標準 Mac OS の後のバージョンでは、完全に本格的な顔のない背景アプリケーションによってこれらが拡張されました。
これらのアプリケーションは、バックグラウンドで実行される通常のアプリケーションです。これらは依然として、ユーザーに対する通常のシステム拡張機能として指定されていました。
macOS は Unix システムであり、デーモンを使用します。 macOS では、Windows がデーモンに対してサービス用語を適用するのではなく、サービス メニューを通じて選択された機能を実装するソフトウェアを指定するためにサービス用語を適用します。
代表的なデーモンの機能
- cron などのスケジュールされたアクションを実行します。
- RAID アレイやハードディスクの健全性などのシステムを監視します。
- ネットワークの要求に応答し、ネットワーク ポート (ポート 80 など) を開きます。
シェルプロンプトのデーモンを起動、再起動、停止するにはどうすればよいでしょうか?
以下のようにサービス コマンドを適用する必要があります。
service daemon-name-here start service daemon-name-here stop service daemon-name-here restart
次の例では、星、再起動、停止が表示されます。
service httpd start service httpd stop service httpd restart
実行中の各デーモンのリストを確認するにはどうすればよいですか?
インストールされているすべてのデーモンのステータスを確認するには、次のように入力します。
service - -status-all
デーモンの計画
デーモンは何をするつもりですか?
デーモンは 1 つのことを実装し、それを適切に実装する必要があります。この 1 つの作業は、複数のドメインにまたがる多数のメールボックスを処理するのと同じくらい複雑な場合もあれば、sendmail を呼び出して管理者にメールを送信してレポートを指定するのと同じくらい簡単な場合もあります。
いずれにせよ、デーモンが何をしなければならないかをよりよく理解する必要があります。これは、指定するかどうかにかかわらず、他のいくつかのデーモンと対話します。それはまた調べるべきことです。
アルファベットから数字へ
交流
デーモンは、端末を介してユーザーと直接通信することはできません。すべての通信は、いくつかのインターフェイス ソート (指定する必要がある場合とそうでない場合があります) を通過します。これは、GUI + GTK のように複雑な場合もあれば、個別のセットのように簡単な場合もあります。
デーモンの基本構造
デーモンは、起動時に実際のジョブの準備を整えるために、いくつかの低レベルの家事を実装する必要があります。これには、次のようないくつかの手順が含まれます。
- スーパープロセス(親プロセス)をフォークオフする
- ファイルモードのマスクを変更する(umask)
- 書き込むログを開いてください
- 特別なセッション ID (略して SID) を作成します。
- 作業ディレクトリ (現在のディレクトリ) を安全な場所に変更します。
- ファイルの分類記述子を閉じる
- 元のデーモンコードを入力してください