
コンピューティングにおいて、デーモンとは、対話型ユーザーの直接的な制御下ではなく、バックグラウンドプロセスとして実行されるプログラムのことです。慣例として、デーモンプロセスには、デーモンであることを示す接尾辞として「d」を付けて名前を付けます。例えば、syslogdはシステムログ機能を実装するデーモンであり、sshdは着信SSH接続を処理するデーモンです。
この概念は多くのコンピューティングシステムに適用できるものの、「デーモン」という用語はほぼ例外なくUnix系システムの文脈で使用されます。他の文脈では、同じ概念に対して異なる用語が使用されます。
システムでは、ネットワーク要求、ハードウェアの動作、または他のプログラムに応答して何らかのタスクを実行するデーモンが、起動時に起動されることがよくあります。cronなどのデーモンは、スケジュールされた時間に定義されたタスクを実行することもあります。
コンピューターの文脈では、この単語は一般的に/ ˈ diː m ən / DEE -mənまたは/ ˈ deɪ m ən / DAY -mənと発音されます。[ 1 ]
この用語は、 MIT の Project MACのプログラマーによって造語されました。1963年頃にProject MACに携わっていたFernando J. Corbató氏によると、彼のチームが、物理学と熱力学における分子の分類を助ける架空のエージェントであるMaxwell's demonに触発されて、daemon という用語を最初に使用したとのことです。 「私たちは、システムの雑務を実行するためにたゆまず働くバックグラウンド プロセスを説明するために、空想的に daemon という言葉を使い始めました」と述べています。[ 2 ] Unixシステムはこの用語を受け継いでいます。Maxwell's demon は、バックグラウンドで働く超自然的な存在としてのデーモンというギリシャ神話の解釈と一致しています。
一般的に、デーモンはギリシャ語のδαίμωνに由来する「demon」の古い形です。Unixシステム管理ハンドブックで、 Evi Nemethはデーモンについて次のように述べています。[ 3 ]
多くの人が「デーモン」という言葉を「悪魔」と同義と捉え、UNIXと冥界との間に何らかの悪魔的な繋がりがあるかのように考えています。これは大きな誤解です。「デーモン」は実際には「悪魔」のより古い形です。デーモンは善悪に偏ることはなく、むしろ人の性格や人格を形作るのに役立ちます。古代ギリシャ人の「個人的なデーモン」という概念は、現代の「守護天使」という概念に似ています。エウダイモニアとは、親切な精霊に助けられたり守られたりする状態のことです。一般的に、UNIXシステムにはデーモンと悪魔の両方が蔓延しているようです。
代替用語としては、サービス(Windows NT 以降、および後に Linux でも使用)、開始タスク(IBM z/OS)[ 4 ] 、ゴーストジョブ(XDS UTS )などがあります。より一般的な用語であるサーバーまたはサーバープロセスが使用されることもあり、特にクライアント/サーバーシステムの一部として動作するデーモンに対して使用されます。[ 5 ]コンピュータネットワークに接続するデーモンはネットワークサービスです。
この用語がコンピュータで使われるようになってから、誤って[ 1 ]ディスクと実行モニタのバックロニムとして合理化されました。[ 6 ] [ 7 ] [ 8 ]
Unix系システムでは、デーモンの親プロセスは多くの場合、 initプロセスですが、常にそうとは限りません。デーモンは通常、initプロセスが直接起動するか、initプロセスによって実行される初期化スクリプトによって実行されるか、またはinitプロセスによって起動されるスーパーサーバーによって起動されるかのいずれかによって作成されます。
Research UnixおよびBSDの init プロセスは、初期化スクリプトからデーモンを起動します。初期化スクリプトのコマンドとして起動されたデーモンは、子プロセスをフォークしてすぐに終了するか、 &を使用してバックグラウンド プロセスとして実行され、初期化スクリプトを実行しているシェルがデーモンの起動後も処理を継続できるようにする必要があります。前者の場合、シェルから実行されたデーモン プロセスが終了するため、init はデーモンとして実行されている子プロセスを採用します。後者の場合、初期化スクリプトを実行しているシェルが終了すると、子デーモン プロセスが init に採用されます。[ 9 ]
System IIIおよびSystem Vのinit のバージョンは、任意のコマンドを実行でき、一度だけ実行するように、または終了時に再起動するように構成できます。[ 10 ] [ 11 ] [ 12 ] [ 13 ]前者のメカニズムは初期化スクリプトを実行するために使用できます。これらのスクリプトから起動されたデーモンは、Research Unix および BSD と同じように動作します。後者のメカニズムは、init から直接デーモンを実行するために使用できます。
デーモンはユーザーのコマンドラインから起動することもできます。ただし、そのように起動されたデーモンは通常、プロセスを制御端末(tty) から切り離すなどの他の操作を実行する必要があります。このような手順は、 daemon(3)などのさまざまな便利なルーチンで実装されることがよくあります。初期化スクリプトによって起動されたデーモンはこれらの手順を実行する必要はありませんが、そうすることで、デーモンが終了した場合にユーザーがデーモンを再起動できるようになります。 [ 14 ] init 自体はデーモンを再起動しません。[ 15 ]このようなデーモンが実行しなければならない操作には、次のものがあります。
setsid()。 open()、、、creat()およびその他のオペレーティングシステム呼び出しが独自のパーミッション マスクを提供でき、呼び出し元の umask に依存しないようにします。プロセスがinetd、launchd、systemdなどのスーパーサーバーデーモンによって開始された場合、スーパーサーバーデーモンはプロセスに対してこれらの機能を実行します。[ 16 ] [ 17 ] [ 18 ]ただし、 systemdで実行するように変換されておらず、 Type=forkingとして指定されている旧式のデーモン[ 18 ]およびinetdの「マルチスレッド」データグラムサーバーは除きます。[ 16 ]
MS-DOSでは、デーモンのような機能は、終了して常駐するプログラム(TSR)として実装されていた。
Windowsでは、Windows サービスはデーモンの機能を提供します。プロセスとして実行され、通常はユーザー (モニター、キーボード、マウスなど) と対話せず、起動時にオペレーティングシステムによって起動される場合があります。Windows 2000以降のバージョンでは、Windows サービスは、コントロール パネル、サービス コントロール マネージャーscコマンド、コマンドnet start、net stopPowerShell 、またはカスタム プログラムなど、さまざまなインターフェイスを介して構成および制御されます。
しかし、Windowsアプリケーションはサービスとしてだけでなく、デーモンとしての役割を果たすことができ、一部のWindowsデーモンは通常のプロセスとして実行するオプションを備えている。
従来のMac OSでは、オプション機能やサービスはシステム拡張機能とコントロールパネル によって提供されていました。これらは起動時に読み込まれ、オペレーティングシステムにパッチを適用するファイルです。後のバージョンのMac OSでは、これらに加えて、バックグラウンドで実行される通常のアプリケーションである、いわゆる「顔のないバックグラウンドアプリケーション」が追加されました。ユーザーにとっては、これらは依然として通常のシステム拡張機能として認識されていました。
Unixベースのより新しいmacOSはデーモンを使用しますが、Windowsのようにデーモンを指すのに「サービス」という用語を使用するのではなく、サービスメニューから選択された機能を実行するソフトウェアを指すのに「サービス」という用語を使用します。