デーモン
読み:デーモン
外語:daemon

 バックグラウンドで動作するプログラムのこと。こういったプロセスを「デーモンプロセス」という。
目次

概要
 その機能から、時にサーバーとも呼ばれることがあるが、内部の刺激で動作するものは特にデーモンといい、これをサーバーとはあまり言わない。
 デーモンという表現であれば、その両方を指すことができる。
 オペレーティングシステム(OS)や場合によっては「ドライバー」と呼ばれることもあるが、ドライバーが必ずしもデーモンであるとは限らない。カーネルに組み込まれることもあるからである。

特徴

主なデーモン
 例えばWebサーバーとして機能しているhttpd(HTTPデーモン)や、FTPサーバーとして機能しているftpd(FTPデーモン)のようなものがある。
 日常、よく世話になっているデーモンに、次のようなものがある。
 デーモンは、名前(例えばプロトコル名)の最後に「d」を付けて表わすのが慣わしとなっている。

デーモン≠悪魔
 デーモンは英語でdaemonと書く。daemonは日本では「デーモン」と読まれる単語だが、「何かやろうとした時出てくる便利な奴」という意味を込めて、あえて「ドラえもん」と茶化して読む人もいる。
 そんなデーモンには二種類があるらしい。
 ここでいうデーモンは前者daemonであり、「(人知れず仕事をしてくれる、便利な)小人さん」という意味で用いられる。
 ちなみにBSDのマスコットキャラは、正式名称は無いらしいが一般に「BSDデーモン」(BSD Daemon)と呼ばれている。名前の由来は当然、このデーモンプロセスのデーモンである。トライデント(三叉の鉾)を持つなど守護神を意識してはいるが、その容姿から、やはり悪魔と俗称される。某ライバルOSのペンギンと違って可愛らしさが無い、などと言われているとかいないとか。

作成方法
 デーモンプロセスといえども、一般にはアプリケーションプログラムと同様に起動される。これを、バックグラウンドで動作させるようにする処理が必要である。
 UNIXではこれが簡単で、プログラムはfork()し、その後親プロセスを終了させるだけで、基本的には完了する。あとは、必要な設定等を随時行なうことになる。inetdから呼ばれる場合は不要だが、さもなくば、一般的には次のような手順を踏むことになる。
  1. fork()して、親プロセスを終了させる。こうすると、シェルに制御が戻る。
  2. setsid()により、プロセスグループとセッショングループのリーダーになる。
  3. 再びfork()し、親プロセス(セッショングループリーダー)を終了させる。
  4. chdir("/")し、どのディレクトリも使用中でないことを明確にする。これを忘れると、ファイルシステムのアンマウントが出来なくなることがある。
  5. umask(0)して、以降作成されるあらゆるファイルを支配下に置く。
  6. ファイルディスクリプターの0、1、2をclose()する。親プロセスから引き継いだ、リダイレクト先不明の標準入出力は使用しない。
  7. stdin、stdout、stderrは、自分で新しいディスクリプターとしてopen()する。

再検索