apacheのgraceful-stop

restartじゃなくて?と思われそうだけど、apacheの終了方法としてgraceful-stopというのがあった。

子プロセスに現在のリクエストの処理の後に終了する (あるいは何もしていなければすぐに終了する) ように助言します。 その後に親プロセスは PidFile を削除し、全ポートからの Listen をやめます。 親プロセスはこのまま継続し、子プロセスがリクエストを処理する のを監視しています。子プロセスが全て処理を終えて終了するか、GracefulShutdownTimeout で指定されたタイムアウトに達した後で、親プロセスも終了します。 タイムアウトに達した場合は、残りの子プロセスには TERM シグナルが送信され、強制終了されます

http://httpd.apache.org/docs/2.2/stopping.html#gracefulstop

何が嬉しいかと言うと、よくaapcheでは

apachectl -k stop && apachectl -k start

というように再起動しようとすると失敗することがある、これはstopでは完全に終了し切っていない状態で次のstartが走り始めてlisten(2)に失敗するため。graceful-stopを使うとまず親プロセスがlistenを止めるとあるのでこれに当たりにくいようだ。
手元で何度か試した限りだと確かに

apachectl -k graceful-stop && apachectl -k start

の方は正しく再起動できた。graceful(restart)では一部の設定が反映されないことがあるので完全に再起動したいけど、一気にプロセスが全部居なくなられるとありがたくない場面などでは便利かもしれない