Apache + PHP の時のプロセスID

ファイル名等重複して欲しくない時に時間とかプロセス ID とかを使ってユニークな文字列を作ったりしますよね。時間だと 1 秒以内に複数のファイルを作る場合に精度(?)が出ないので、プロセス ID を絡ませて、とか。

んで、今運用しているシステムでのそのようなことをやっていたのですが、今見るとやたらと寿命の長い httpd が何個もいるじゃないですか(Apache1.3です)。PHP は無限ループになったりしたときのフェイルセーフ機構が付いているので、ある程度時間が経つと自動的にプログラムを停止して終了するようになっています。ということはプログラムの問題でも無い、と。

ということでいろいろ調査をしていたのですが、どうやら PHP の場合 httpd は使いまわされるらしいです*1。うへー、いつから?って始めからなんだろうけど…。CGI の場合は終了すると思ったので、モジュールだとこういう動作になるということなんですかね。

ということで、同じプロセス ID が連続してヒットする結果になってしまうので、その辺りを考慮しつつプログラムを組む必要がありますね。セッションで連番を使うとか(うちはこれ)。

Apache2.0 だとどうなんでしょうね。スレッドを作って動くはずなので、さらに違う挙動になるんでしょうね。当てにするなってことなんでしょうけど。

*1:デフォルトの動作がこうなっているということらしい