デーモン (ソフトウェア)
デーモン(Daemon)は、UNIXなどのマルチタスクオペレーティングシステムにおけるバックグラウンド動作するプログラムを意味する。ユーザーが直接制御するプログラムではない。通常、プロセスとして使用される。典型的なデーモンは名前の最後尾に "d" が付く。例えば、syslogd はシステムログを扱うデーモンである。
デーモンは一般に親プロセスを持たないが、プロセスの階層上 init を親としている。デーモンは起動処理内でforkで子プロセスを作成し、親プロセスの方が即座に終了する。
システムは、ブート処理の延長上でデーモンを多く起動する。ネットワークからの要求を処理するもの、ハードウェアの何らかの活動を処理するものなどがある。他にも、一部のLinuxシステムの devfsd のようにハードウェアの設定を行うもの、cron のようにスケジュールされたタスクを実行するものなど、様々な処理を担っている。
目次 |
[編集] 語源
- Daemon(守護神)とはギリシャ神話に登場し、神々が煩わされたくないと考えた雑事を処理した存在である。同様にコンピュータのデーモンもユーザーが煩わされたくないタスクをバックグラウンドで実行する[1]。
- CTSSのプログラマがマクスウェルの悪魔とのアナロジーからDaemonという語彙を用い、そこから派生したシステム(UNIXも含まれる)が受け継いだ[2]。また、BSDとその派生OSはデーモンをマスコットとしている。
- 他の語源として「Disk And Execution MONitor」が時折使われるが、バクロニムのようである。
[編集] デーモンの種類
技術的に厳密に言えば、UNIXは親プロセスの番号が 1 (init) で、制御端末を持たないプロセスをデーモンと認識する。親プロセスが子プロセスの終了を待たずに先に終了した場合、initプロセスが終了した親プロセスの代わりに残された子プロセスの親となる。デーモンを起動する一般的な手法は
- プロセスを制御端末から切り離す。
- プロセスをセッションリーダーにする。
- プロセスをプロセスグループのリーダーにする。
- forkとexitを1度か2度行い、プロセスをバックグラウンドに残す。この処理は、プロセスをセッションリーダーにするためにも必要なこともある。また、この処理は親プロセスが正常に実行し続けることを許可する。この処理を "fork off and die”と呼ぶ。
- プロセスのカレントディレクトリをルートディレクトリ("/")にすることにより、プロセスが他ディレクトリを使用中にしないようにする。
- umaskを0に変更する。これは、open()、creat()、その他の呼出しに、それら自身のパーミッションマスクを与え、呼出し側のumaskに影響されないようにするためである。
- 実行時に親プロセスがオープンしたままの、親プロセスから継承したすべてのオープンファイルをクローズする(必要なファイルは後からオープンする)。クローズするファイルにはファイルデスクリプタ0,1,2(stdin標準入力,stdout標準出力,stderr標準エラー出力)も含まれる。
- 標準ストリーム(stdin、stdout、stderr)をログファイルまたはシステムコンソールまたは/dev/nullにリダイレクトする。
ちなみに、4.4BSDを祖先とするBSD系OS、glibcを採用したlinux系OSなど、近代的なUNIXシステムには、上述した処理を行う関数daemon()が用意されており、この関数を呼ぶだけで自プロセスをデーモンに変えることができる。
一般的なUNIXの用例として、initの子プロセスになっているかどうかに関わらず、バックグラウンド動作するプロセスを(広義の)デーモンと呼ぶ場合もある。欧米では、"demon" と綴ることも多い。どちらも発音は同じで、カタカナ表記すると「ディーマン」「ディーモン」が近い。
MS-DOS環境では、そのようなプログラムをTSR(Terminate and Stay Resident)ソフトウェアとして書いた。Microsoft Windowsシステムでは、Windowsサービスと呼ばれるプログラムがデーモンの役割を担っているが、Windows上でもデーモンという用語が市民権を得つつある[要出典]。Mac OSでは、Extension と呼んだ。Mac OS Xは、UNIX系なのでデーモンが使われている。なお、Mac OS X には Service というものもあるが、これは全く異なるコンセプトであり、Windowsでいうところのサービス(Windows Service)とは別物である。
[編集] 関連項目
[編集] 脚注
- ^ 出典[1]、[2]、[3]他
- ^ 「マクスウェルの悪魔」とされているが、一説には「Maxwell's daemon」であり「マクスウェルの守護神」。フェルナンド・J・コルバト (2002年1月23日). “Take Our Word for It”. 2006年8月20日閲覧。