
コンピューティングにおいて、デーモンとは、対話型ユーザーによる直接的な制御下ではなく、バックグラウンドプロセスとして実行されるプログラムです。慣習的に、デーモンプロセスの名前には、デーモンであることを示すために「d」という文字を接尾辞として付けます。例えば、syslogdはシステムログ機能を実装するデーモンであり、sshdはSSH接続の受信を処理するデーモンです。
この概念は多くのコンピューティングシステムに当てはまりますが、「デーモン」という用語はほぼUnixベースのシステムでのみ使用されます。他の文脈では、同じ概念を表すために異なる用語が使用されています。
システムは起動時にデーモンを起動することが多く、ネットワーク要求、ハードウェアの動作、あるいは他のプログラムへの応答として何らかのタスクを実行します。cronなどのデーモンは、定義されたタスクをスケジュールされた時間に実行することもあります。
コンピューターの文脈では、この単語は一般的に/ ˈ d iː m ən / DEE -mənまたは/ ˈ d eɪ m ən / DAY -mənと発音されます。[1]
この用語は、 MITのMACプロジェクトに所属するプログラマーによって造られた。 1963年頃にMACプロジェクトに携わっていたフェルナンド・J・コルバトによると、彼のチームが初めてデーモンという用語を使用した。これは、分子の選別を助ける物理学と熱力学における架空のエージェントであるマクスウェルの悪魔にヒントを得たもので、「我々は、システムの雑用を精力的にこなすバックグラウンドプロセスを表すために、空想的にデーモンという言葉を使い始めた」と述べている。[2] Unixシステムはこの用語を継承した。マクスウェルの悪魔は、バックグラウンドで動作する超自然的な存在としてのデーモンというギリシャ神話の解釈と一致している。
一般的な意味では、デーモンはギリシャ語の「demon」の古い形である。Unixシステム管理ハンドブックの中で 、エヴィ・ネメスはデーモンについて次のように述べている。[3]
多くの人が「デーモン」という言葉を「悪魔」と同義語として捉え、UNIXと冥界の間に何らかの悪魔的なつながりがあるかのように考えがちです。これはとんでもない誤解です。「デーモン」は実際には「悪魔」のずっと古い形です。デーモンは善悪に特定の偏りはなく、むしろ人の性格や人格を定義するのに役立ちます。古代ギリシャ人の「パーソナルデーモン」という概念は、現代の「守護天使」の概念に似ています。エウダイモニアとは、親切な精霊に助けられたり守られたりする状態です。一般的に、UNIXシステムはデーモンと悪魔の両方に侵されているようです。
代替用語としては、サービス(Windows、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 のようにデーモンに対してその用語を使用するのではなく、サービス メニューから選択された機能を実行するソフトウェアを指定するために「サービス」という用語が使用されます。