デーモン (ソフトウェア)

デーモン () は、UNIX, Linux, Mac OS XなどUnix系のマルチタスクオペレーティングシステム (OS) において動作するプロセス（プログラム）で、主にバックグラウンドで動作するプロセス。ユーザが直接対話的に制御するプログラムもデーモンとして作ることができる。典型的なデーモンは名前の最後尾に "d" が付く。例えば、syslogd はシステムログを扱うデーモン、sshd は内外のSSH接続要求を受け付けるデーモンである。
Unix系の環境では、常にではないが、デーモンの親プロセスはinitプロセスとなっていることが多い。デーモンは起動処理内でforkで子プロセスを作成し、親プロセスの方が即座に終了するため、init が里親となる。さらにデーモンまたはOSは制御端末 (tty) からの切り離しなどの処理も行う必要がある。こういったデーモンを生成するための手続きをUnix系では "daemon(3)" などの便利なルーチンにまとめて実装していることが多い。
システムは、ブート処理の延長上でデーモンを多く起動する。ネットワークからの要求を処理するもの、ハードウェアの何らかの活動を処理するものなどがある。他にも、一部のLinuxシステムの udevd のようにハードウェアの設定を行うもの、cronのようにスケジュールされたタスクを実行するものなど、様々な処理を担っている。
語源と用語.
daemon（守護神）とはギリシャ神話に登場し、神々が煩わされたくないと考えた雑事を処理した存在である。同様にコンピュータのデーモンもユーザーが煩わされたくないタスクをバックグラウンドで実行する。
フェルナンド・J・コルバトによれば、MITのProject MACで働いていた1963年、彼のチームがデーモン (daemon) という用語を初めて使ったという。分子をより分けてくれるという物理学や熱力学の空想上の存在であるマクスウェルの悪魔 (Maxwell's demon) が発想の元となっている。
我々は気まぐれに、システムの雑用をこなしてくれるバックグラウンドプロセスを「デーモン」と呼び始めた。
UNIXシステムがその用語を受け継いだ。BSDとその派生OSはデーモンをマスコットとしている。このマスコットはキリスト教によく見られる悪魔 (demon) の姿をしている。欧米では、"demon" と綴ることも多い。どちらも発音は同じで、カタカナ表記すると「ディーマン」「ディーモン」が近い。
一般的意味でのdaemonはdemonの古い綴りであり、ギリシア語のδαίμωνに由来する。"Unix System Administration Handbook" でEvi Nemethは次のように記している。
多くの人々が "daemon" という語と "demon" という語を同等視しており、UNIXと冥界の間にある種の悪魔的関係があるように感じている。これは言語道断な誤りである。"daemon" は実際には "demon" のより古い形であり、daemon自体には善または悪への特定の偏向の意味はなく、むしろ個人の性格や個性を説明付ける役割を担っていた。古代ギリシアにおける「個人的daemon」の概念は現代の守護天使に近く、"eudaemonia" は親切な精霊によって助けられたり保護されたりしている状態を意味する。現実にはUNIXシステムではdaemonとdemonの両方が横行しているようだ。(p.403)
神話的象徴としてのさらなる説明をすれば、daemonは目には見えないが常に側にいて、その意志を働かせている何ものかである。プラトンの著作で、ソクラテスは自身の個人的daemonを現代的な道徳的良心のような概念として説明している。
デーモンと同様の意味で使われている用語としては、サービス (Windows NT)、サブシステム (IBM z/OS)、サーバ・バーチャル・マシン (IBM )、ゴーストジョブ (XDS ) などがある。
生成.
技術的に厳密に言えば、Unix系システムでは親プロセスが終了していて initプロセス（プロセス番号1）を親プロセスとしていて制御端末を持たないプロセスをデーモンと認識する。親プロセスが子プロセスの終了を待たずに先に終了した場合、initプロセスが終了した親プロセスの代わりに残された子プロセスの親となる。しかし一般的なUNIXの用例として、initの子プロセスになっているかどうかに関わらず、バックグラウンド動作するプロセスを（広義の）デーモンと呼ぶ場合もある。
デーモンを起動する一般的な手法は次の通りである。
ちなみに、4.4BSDを祖先とするBSD系OS、glibcを採用したLinux系OSなど、最近のUnix系システムには、上述した処理を行う関数daemon()が用意されており、その関数を使うだけで自プロセスをデーモンに変えることができる。
MS-DOSとMicrosoft Windowsでの実装.
MS-DOS環境では、そのようなプログラムをTSR (Terminate and Stay Resident) ソフトウェアとして書いた。Microsoft Windows NTシステムでは、Windowsサービスと呼ばれるプログラムがデーモンの役割を担っている。それらはプロセスとして動作し、モニター/キーボード/マウスは全く使わず、ブート時にOSが起動することが多い。Windows 2000およびそれ以降では、Windowsサービスはコントロールパネルのサービスコントロールマネージャ（scコマンド）などを使ってユーザーが設定したり、停止/起動したりできるようになった。
しかし、Windowsでは一部の常駐アプリケーションなどもデーモンのように振る舞うことができ、一部のWindowsサービスは通常プロセスのように動作するオプションを備えている。
Mac OS での実装.
初期のMac OSでは、オプション機能やサービスを立ち上げ時にファイルとしてロードしOSにパッチとして当てる機能があった。それらをおよびと呼んでいた。その後のMac OSでは、それらがウィンドウ表示されないバックグラウンドで動作する普通のアプリケーションとして発展していった。ユーザーにはそれらを依然としてsystem extensionsと説明していた。
macOSはUNIXなので、デーモンが使われている。なお、macOSにはServiceというものもあるが、これは全く異なるコンセプトであり、Windowsでいうところのサービス (Windows Service) とは別物である。