「デーモン(daemon)プロセスの生成」の編集履歴(バックアップ)一覧に戻る

デーモン(daemon)プロセスの生成 - (2010/08/09 (月) 22:44:29) の編集履歴(バックアップ)


デーモンは、UNIX系のOSにおいて、バックグラウンドで起動され、サーバプロセスとして動作するプログラムのことです。
一般的にはシステムの起動時に起動され、常駐します。
Wikipediaによれば、技術的には以下の定義だそうです。
UNIXは親プロセスの番号が 1 (init) で、制御端末を持たないプロセスをデーモンと認識する。

プログラムをデーモンにするには、以下の手順が必要です。
  • 端末セッションとプロセスグループの切り離し
 プロセスは端末からのシグナルを受けたり、標準入出力を使うために端末セッションに属します。また、起動すると親のプロセスグループに属すことになります。デーモンプロセスはバックグラウンドで動作するため、端末からのシグナルを受けて不意に終了しないようにする必要があります。また端末を終了すると、端末セッション内のプロセスグループに終了シグナルが飛び、それを受けたプロセスは終了してしまいます。そのため、デーモンプロセスは端末セッションとプロセスグループを切り離します。

  • ファイルディスクリプタのクローズ

  • ワーキングディレクトリの移動
  • ファイル生成マスク値の変更
  • SIGCHILDシグナルの処理

   * プロセスを制御端末から切り離す。
   * プロセスをセッションリーダーにする。
   * プロセスをプロセスグループのリーダーにする。
   * forkとexitを1度か2度行い、プロセスをバックグラウンドに残す。この処理は、プロセスをセッションリーダーにするためにも必要なこともある。また、この処理は親プロセスが正常に実行し続けることを許可する。この処理を "fork off and die”と呼ぶ。
   * プロセスのカレントディレクトリをルートディレクトリ("/")にすることにより、プロセスが他ディレクトリを使用中にしないようにする。
   * umaskを0に変更する。これは、open()、creat()、その他の呼出しに、それら自身のパーミッションマスクを与え、呼出し側のumaskに影響されないようにするためである。
   * 実行時に親プロセスがオープンしたままの、親プロセスから継承したすべてのオープンファイルをクローズする(必要なファイルは後からオープンする)。クローズするファイルにはファイルデスクリプタ0,1,2(stdin標準入力,stdout標準出力,stderr標準エラー出力)も含まれる。
   * 標準ストリーム(stdin、stdout、stderr)をログファイルまたはシステムコンソールまたは/dev/nullにリダイレクトする。