このプログラムは、 Google APP Engine の dev_appserver.sh のように、制 御を戻さないプログラムをデーモンのように動作させるためのプログラムであ る。実行をすると、このプログラム自体はfork(2) して、子プロセスを生成した後に すぐに制御を戻す。
子プロセスは、/usr/bin/logger を exec するプロセスと、ターゲットプログ ラムの実行をする子プロセスをフォークしたのち、ターゲットプログラム を制御し、PID ファイルを管理するプロセス(便宜上 コントロールプロセ スと呼ぶ)がselect(2) でターゲットプロセスの停止と、コントロールプ ログラムに送られるシグナルを待つ。
コントロールプロセスのPID は、PID ファイルに書き込まれ
if [ -f /tmp/daemonlize.pid ] ; then kill -INT ``cat /tmp/daemonlize.pid`` ; fi
でプロセスに INT シグナルをスクリプトを書きやすくする。
ターゲットプロセスの標準入力は、/dev/null につなげられ、標準出力と 標準エラー出力は、/usr/bin/logger へパイプでつなげられる。
コントロールプロセスが、INT シグナル(と HUP シグナル)を受け取った 時には、ターゲットプロセスに対して、INTシグナルを送り、プロセスの終 了を待って終了する。ターゲットプロセスが、先に終了した場合にも 本プロセスは終了する。