Apacheにおける reload コマンドと graceful コマンドの動きを見てみようと思いましたので、下記のようなPHPスクリプトを作成してみました。
ブラウザからアクセスすると30秒待って《OK》が表示されます。
まずは reload を試す
reload は、『全ての処理中リクエストは終了される』とか聞きますが果たして?
とりあえずブラウザから test.php にアクセス。待ち状態に入ります。
そこですかさずサーバ側で reload を実施。
切れない…
少し想定と違いました。
どうやら切れないようです。
続いて graceful を試す
graceful は『プロセスが終わるのを待ってから新しい設定を反映させる』とか聞きますが果たして?
先ほどと同様にブラウザから test.php にアクセス。待ち状態に入ります。
そこですかさずサーバ側で graceful を実施。
あれ?
30秒待たずにいきなり《OK》が表示されました‥。
PHPログにも何も出力されていません。
どうやら子プロセス(sleep)が強制的に終了させられて次の処理に移り、処理完了となったみたいです。
結論
結論として、 graceful は子プロセスが強制的に終了させられて進む。
reload は終了まで待たされる。
という感じになりました。なるほど。
gracefulするとsleepが効かない原因を調べていたらここにたどり着きました。
“子プロセスが”というより”sleepが”無視されている感じなんですよねぇ…