Apacheを起動するときに使う事もある apachectl の -k restart は stop && start
ではないので注意しましょう。
ServerLimitやThreadLimitなどの一部の設定は、restart では適用されず、stop && start
が必要になります。
apachectl は実はshellscriptで出来ています。中をのぞくと
#!/bin/sh
..
HTTPD='../httpd'
..
start|stop|restart|graceful|graceful-stop)
$HTTPD -k $ARGV
ERROR=$?
;;
と書かれています。restartはhttpdコマンドにそのまま渡されるようです。
そこでhttpdコマンドのドキュメントを読むと詳しくは
Stopping Apache httpd
http://httpd.apache.org/docs/2.2/stopping.html
を見ろとあります。そのページの再起動のところを読むと
Signal: HUP
apachectl -k restart
Sending the HUP or restart signal to the parent causes it to kill off its children like in TERM, but the parent doesn’t exit. It re-reads its configuration files, and re-opens any log files. Then it spawns a new set of children and continues serving hits.
と書いてあります。子プロセスにTERMを送って終了させ、親プロセスはそのままで設定ファイルなどを読み直して子プロセスを生成する。実際のところリクエスト終了まで待たないgracefulとイメージした方がいいかもしれません
Apacheの再起動をしたいとき、自分は普段 apachectl を使わずに init.dスクリプトを使います
/etc/init.d/httpd (restart|graceful)
OSやinit.dスクリプトの書き方にもよるのでしょうが、多くの場合、restartは stop && start な実装になっていると思います。