デーモン (ソフトウェア)
出典: フリー百科事典『ウィキペディア(Wikipedia)』
デーモン(Daemon)は、UNIXなどのマルチタスクオペレーティングシステムにおけるバックグラウンド動作するプログラムを意味し、ユーザーが直接制御するプログラムではない。通常、プロセスとして使用される。典型的なデーモンは、名前の最後尾に "d" が付く。例えば、syslogd はシステムログを扱うデーモンである。
デーモンは一般に親プロセスを持たない(PPIDが0)が、プロセスの階層上 init を親としている。デーモンは起動処理内でforkで子プロセスを作成し、親プロセスの方が即座に終了する。
システムは、ブート処理の延長上でデーモンを多く起動する。ネットワークからの要求を処理するもの、ハードウェアの何らかの活動を処理するものなどがある。他にもハードウェアの設定を行うもの(一部のLinuxシステムの devfsd)、スケジュールされたタスクを実行するもの(cron)など様々な処理を担っている。
目次 |
[編集] 語源
CTSSのプログラマがマクスウェルの悪魔からのアナロジーからこの用語を使い、そこから派生したシステム(UNIXも含まれる)がこの用語を受け継いだ(「マクスウェルの悪魔」とされているが、一説には「Maxwell's daemon」であり「マクスウェルの守護神」)[1]。Daemon(守護神)とはギリシャ神話に登場し、神々が煩わされたくないと考えた雑事を処理した存在。同様にコンピュータのデーモンもユーザーが煩わされたくないタスクをバックグラウンドで実行している[2]。BSDとその派生OSはデーモンをマスコット化しているが(BSDデーモン)、その姿はキリスト教的な悪魔(demon)をかわいくしたものである。他の語源として「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にリダイレクトする。
ちなみに、近代的なUNIXシステム(4.4BSDを祖先とするBSD系OS、glibcを採用したlinux系OS、その他)には、上述した処理を行う関数daemon()が用意されており、この関数を呼ぶだけで自プロセスをデーモンに変えることができる。
一般的なUNIXの用例として、initの子プロセスになっているかどうかに関わらず、バックグラウンド動作するプロセスを(広義の)デーモンと呼ぶ場合もある。欧米では、"demon" と綴ることも多い(訳注:どちらも発音は同じで、カタカタ表記すると「ディーマン」とか「ディーモン」が近い)。
MS-DOS環境では、そのようなプログラムをTSR(Terminate and Stay Resident)ソフトウェアとして書いた。Microsoft Windowsシステムでは、Windows Service と呼ばれるプログラムがデーモンの役割を担っているが、Windows上でもデーモンという用語が市民権を得つつある。Mac OSでは、Extension と呼んだ。Mac OS Xは、UNIX系なのでデーモンが使われている。Mac OS X には Service というものもあるが、これは全く異なるコンセプトである。
[編集] 関連項目
[編集] 脚注
- ↑ フェルナンド・J・コルバト (2002年1月23日). "Take Our Word for It" .
- ↑ 出典[1]、[2]、[3]他