シグナルの概要
Apacheは最初に起動された親プロセスと、クライアントから要求があるたびに子プロセスを生成して処理をこなしていきます。通常、シグナルは親プロセスに送信します。親プロセスに送信することができるシグナルはTERM、HUP、USR1 です。
親プロセスにシグナルを送信
# kill -TERM 'cat /var/run/httpd.pid'
入力の結果を読むことができます。
# tail -f /var/log/httpd/error_log
Apache 1.3 からは、Apache を起動、停止、再起動するsrc/support/apachectlスクリプトがあります。
TERM シグナル: 停止
親プロセスにTERMシグナルを送信すると、数秒後に子プロセスが完全に終了し、それから親プロセスが終了します。処理中のリクエストは終了して、それ以上のリクエストは受け取りません。
HUP シグナル: 再起動
親プロセスにHUPシグナルを送信すると、TERMシグナルのように子プロセスを終了しますが、親プロセスは終了しません。親プロセスは設定ファイルを再読み込みして、ログファイルを再び開きます。それから、新しい子プロセスを生んでリクエストの受信を続行します。
status moduleを使用していれば、HUPが送信されたときにサーバの統計値は 0 になります。
※再起動したときに設定ファイルにエラーがあれば、親プロセスは再起動しないで、エラーを出して終了します。これを避けるためには、以下が参考になります。
USR1 シグナル: 完全再起動
USR1シグナルは、親プロセスに子を終了させるように通知します。親プロセスは設定ファイルを再読み込みし、ログファイルを再び開きます。
このコードは常に、MaxClients、MinSpareServers、MaxSpareServersの設定に関連付けられています。その上、StartServers にも関連付けられています。