デーモンプロセスの概要

デーモンはバックグラウンドで実行される特別なプロセスであり、特定のシステム タスクを実行するために使用されます多くのデーモンはシステムの起動時に開始され、システムがシャットダウンされるまで実行されます。必要な場合にのみ開始され、タスクが完了すると自動的に終了するものもあります。

導入

デーモンはバックグラウンドで実行されるプロセスであり、端末によって制御されませんUnix オペレーティング システムには、バックグラウンドで実行され、さまざまな管理タスクを実行する典型的なデーモン プロセス (必要に応じて数は 20 ~ 50 の範囲) が多数あります。

デーモンを 1 つの端末から起動すると、他のユーザーが同じ端末を使用する可能性があるため、ユーザーはデーモンをすべての端末から独立させますたとえば、ユーザーが端末からデーモンを起動して終了し、その後、別の人が端末にログインします。ユーザーは、ターミナルの使用中に後者がデーモンからエラー メッセージを受信することを望んでいません。同様に、端末によって入力された信号 (割り込み信号など) は、その端末で以前に開始されたデーモンの実行に影響を与えるべきではありませんサーバーをバックグラウンドにするのは簡単ですが (シェルのコマンドラインが & で終わっていれば)、ユーザーは、プログラム自体が端末に依存せずに自動的にバックグラウンドに移行できるようにするための作業も行う必要があります。

デーモンには制御端末がないため、一般的な報告メッセージであっても、管理者が処理する必要がある緊急メッセージであっても、何かが発生した場合は何らかの方法で出力する必要があります。syslog 関数は、この情報を出力する標準的な方法であり、情報を syslogd デーモンに送信します。

ステップの作成

(1) 子プロセスを作成し、親プロセスを終了する

デーモンプロセスが制御端末から分離されているため、最初に子プロセスが作成され、親プロセスが終了するため、プログラムはシェル端末での実行が終了したように見せかけます。その後、子プロセスですべての作業が完了し、ユーザーはシェル端末で他のコマンドを実行できるようになります。これにより、プログラムは孤立プロセスとして実行され、制御端末から正式に分離されます。

(2) 子プロセスに新規セッションを作成する

このステップは、デーモン プロセスを作成する際の最も重要なステップであり、システム関数の setid が使用されます。

setid 関数は、新しいセッションを作成し、セッション グループのリーダーとして機能するために使用されます。setsid の呼び出しには、プロセスに元のセッションの制御を解除する、プロセスに元のプロセス グループの制御を解除させる、およびプロセスに元の制御端末の制御を解除させるという 3 つの機能があります。

fork関数を呼び出すと、子プロセスは親プロセスのセッション(1つ以上のプロセスグループの集合体であるセッション)、プロセスグループ、制御端末などを完全にコピーし、親プロセスは終了しますが、元のセッションは残ります。 、プロセスグループなど、制御端末などは変わっていないため、本当の意味で独立しているわけではありません。setsid 関数を使用すると、プロセスを完全に独立させ、他のすべてのプロセスから制御されないようにすることができます。

(3)作業ディレクトリを変更する

fork を使用して作成された子プロセスも、親プロセスの現在の作業ディレクトリを継承します。プロセスの実行中はカレントディレクトリが存在するファイルシステムをアンマウントできないため、カレント作業ディレクトリを「/」や「/tmp」などの別のパスに変更してください。作業ディレクトリを変更する一般的な関数は chdir です。

(4)ファイル作成マスクをリセット

ファイル作成マスクとは、ファイルの作成時に対応するビットをマスクすることを指します。fork 関数を使用して作成された子プロセスは、親プロセスのファイル作成マスクを継承するため、子プロセスがファイルを使用する際に多大な支障をきたします。したがって、ファイル作成マスクを 0 に設定すると、デーモンの柔軟性が大幅に向上します。ファイル作成マスクを設定する関数はumaskで、通常の使用方法はumask(0)です。

(5) ファイルディスクリプタを閉じる

fork で作成された子プロセスは、親プロセスから開いているファイルの一部を継承します。これらの開かれたファイルはデーモンによって読み書きされることはありませんが、それでもシステム リソースを消費し、ファイル システムのアンマウントを妨げる可能性があります。

動作モード

①独立して動作するデーモンプロセス

独立して実行されるデーモン プロセスは、init スクリプトによって管理されます。独立して実行されるすべてのデーモン プロセスのスクリプトは、/etc/rc.d/init.d/ ディレクトリにあります。システム サービスは、syslogd や cron など、すべて独立して実行されるデーモン プロセスです。サーバーは特定のポートでクライアント接続を待機します。クライアントが接続リクエストを生成すると、デーモンは接続に応答するサブサーバーを作成し、メイン サーバーはリッスンを続けます。複数のサブサーバー プールを次のクライアント要求を待機させておくため。

②xinetdが管理するデーモンプロセス

デーモン プロセスの概念から、システム上で実行されているすべてのサービスは、特定のポートで接続をリッスンするデーモン プロセスを実行する必要があることがわかります。これは通常、リソースの無駄を意味します。この問題を解決するために、Linux では「ネットワーク デーモン サービス プログラム」という概念が導入されました。CentOS 6.4 で使用されるネットワーク デーモンは xinted (eXtendedInterNET サービス デーモン) です。

xinetd は、指定された複数のポートを同時にリッスンすることができ、ユーザー要求を受け入れるときに、ユーザーが要求したさまざまなポートに基づいて、これらのユーザー要求を処理するさまざまなネットワーク サービス プロセスを開始できます。xinetd は起動サービスを管理する管理サーバーと考えることができ、クライアントからのリクエストをどのプログラムに引き渡して処理するかを決定し、対応するデーモンを起動します。

特徴

まず、デーモン プロセスの最も重要な特徴は、デーモン プロセスがバックグラウンドで実行されることです。次に、デーモンは、それが実行される環境から分離する必要があります。これらの環境には、閉じられていないファイル記述子、制御端末、セッションおよびプロセス グループ、作業ディレクトリ、およびファイル作成マスクが含まれますこれらの環境は通常、デーモン プロセスを実行する親プロセス (特にシェル) からデーモン プロセスによって継承されます。最後に、デーモンの起動方法には特別な点があります。Linux システムの起動時に起動スクリプト /etc/rc.d から起動することも、ジョブ制御プロセス crond によって起動することも、ユーザー端末 (通常はシェル) によって実行することもできます。

この点を除けば、デーモンプロセスは基本的に通常のプロセスと同じです。したがって、デーモンプロセスを記述するということは、実際には、上記のデーモンプロセスの特性に従って、通常のプロセスをデーモンプロセスに変換することになります。

分類

サービスの種類に応じて、以下のカテゴリに分類されます。

1) システムデーモンプロセス: syslogd、login、crond、at など。

2) ネットワークデーモン: sendmail、httpd、xinetd など。

3) 独立して起動されたデーモン プロセス: httpd、named、xinetd など。

4) パッシブデーモンプロセス (xinetd によって開始される): telnet、finger、ktalk など。

転載元:百度百科-検証


デーモン

マルチタスク コンピュータ オペレーティング システムでは、デーモン (/ˈdiːmən/ または /ˈdeɪmən/) は、対話型ユーザーの直接制御下ではなく、バックグラウンド プロセスとして実行されるコンピュータ プログラムです。従来、デーモン プロセスのプロセス名は文字 d で終わり、そのプロセスが実際にデーモン プロセスであることを明確にし、デーモン プロセスを通常のコンピュータ プログラムと区別します。たとえば、syslogd はシステム ログ機能を実装するデーモンであり、sshd は受信 SSH 接続にサービスを提供するデーモンです。

Unix 環境では、デーモンの親プロセスは通常、init プロセスですが、常にそうとは限りません。デーモンは通常、子プロセスをフォークしてすぐに終了して init に子プロセスを採用させるプロセス、または init プロセスがデーモン プロセスを直接開始するプロセスによって作成されます。さらに、フォークして終了することによって開始されたデーモンは、通常、制御端末 (tty) からプロセスを切り離すなど、追加の操作を実行する必要があります。このようなプロシージャは通常、Unix の daemon(3) などのさまざまな便利なルーチンに実装されます。

通常、システムは起動時にデーモンを開始し、これらのデーモンは特定のタスクを実行することでネットワーク要求、ハードウェアアクティビティ、またはその他のプログラムに応答します。cron などのデーモンは、スケジュールされた時間に定義されたタスクを実行することもできます。

用語

この用語は、MIT MAC プロジェクトのプログラマーによって造られました。1963 年に MAC プロジェクトに取り組んだフェルナンド J. コルバトによると、彼のグループが、分子の分類を助ける物理学と熱力学における架空のエージェントであるマクスウェルの悪魔に触発されて、デーモンという用語を最初に使用したそうです。デーモンという言葉は、システムの雑用を休みなく実行するバックグラウンド プロセスを指しますUnix システムはこの用語を継承しています。マクスウェルの悪魔は、背後で働く超自然的な存在であるデーモンのギリシャ神話の解釈と一致しています。

一般的な意味では、デーモンはギリシャ語の δαίμων に由来するデーモンという単語の古い形です。Unix システム管理マニュアルの中で、Evi Nemeth はデーモンについて次のように述べています。

多くの人はデーモンという言葉を悪魔と同一視しており、UNIX と地下世界との間に何らかの邪悪な関係があることを暗示しています。これは衝撃的な誤解です。デーモンは実際にはデーモンのより古い形態です。デーモンには善悪に対する特定の偏見はありませんが、代わりに人の性格や性格を定義するために使用されます。古代ギリシャの個人的な守護霊の概念は、現代の守護天使の概念に似ていました。エウダイモニアとは、善良な精神によって助けられている、または保護されている状態です。多くの場合、UNIX システムはデーモンやデーモンでいっぱいであるように見えます。

神話の象徴性のさらなる特徴は、デーモンは目に見えないものであるが、常に存在し、その意志に従って行動するということです。プラトン作とされる『テアゲス』の中で、ソクラテスは自身の個人的な守護聖人を、現代の道徳的良心の概念に類似したものとして説明しています。神々の恩恵は私に素晴らしい贈り物を与えてくれました。それは幼少の頃から私を離れることはありませんでした。その声は、単独で聞くと、私がやろうとしていることを止めるものであり、決して私にそれを促すものではありません。

現代の用法では、デーモンという単語は /ˈdiːmən/ DEE-mən と発音されます。コンピューター ソフトウェアの文脈では、元の発音 /ˈdiːmən/ は話者によっては /ˈdeɪmən/ DAY-mən に変わっています。

デーモンの別の用語としては、サービス(Windows NT 以降の Windows で使用され、その後 Linux でも使用される)、スタートアップ タスク(IBM z/OS)、およびゴースト ジョブ(XDS UTS) などがあります。

この用語はコンピュータに対して使用された後、ディスクとエグゼキュータの対義語として合理化されました。

コンピュータ ネットワークに接続するデーモン プロセスは、ネットワーク サービスの一例です。

埋め込む

Unix 風のシステム

厳密に技術的な意味では、親プロセスが終了し、デーモンに init プロセス (プロセス番号 1) が親として割り当てられ、制御端末を持たない場合、Unix 系システム プロセスはデーモン プロセスになります。ただし、より一般的には、デーモンは、init プロセスの子であるかどうかに関係なく、任意のバックグラウンド プロセスにすることができます。

Unix 系システムでは、プロセスがデーモンになる一般的な方法は次のとおりです。

  • 必要に応じて、環境から不要な変数を削除します。
  • (フォークされた親セクションで) フォークして終了することにより、バックグラウンド タスクとして実行されます。これにより、デーモンの親プロセス (シェルまたは起動プロセス) が終了通知を受け取り、通常の実行を継続できるようになります。
  • 呼び出しセッションからの切り離しは、通常、1 つの操作 setid() で実行されます。
    • 制御端末から離れてください。
    • 新しいセッションを作成し、そのセッションのセッション リーダーになります。
    • プロセスグループのリーダーになります。
  • デーモンが取得されないことを確認したい場合は、

 参照: Daemon_Global Encyclopedia

おすすめ

転載: blog.csdn.net/fuhanghang/article/details/133157059