From: KUBO Takehiro Date: 2008-09-08T08:19:19+09:00 Subject: [ruby-dev:36202] ruby 1.9 (win32版) での Process.ppid 久保です。 ソースコードを見た上での判断で、実際には動かしてないのですが、 win32/win32.c の rb_w32_getppid() は初回の呼び出しのみ親プロセスID を戻すが、二回目以降は常に 0 になってませんか? (Windows 2000 以降の NT系のみ) あと、UNIX 系の getppid() は、親プロセスが亡くなると、ppid は 1(init プロセスの pid)になりますが、Windows の NtQueryInformationProcess() で取得できる親プロセスIDは、親プロセスが亡くなっても同じ値のままです。 UNIX と Windows で Process.ppid の動作が異なるので、 (1) UNIX と Windows の違いを Process.ppid の rdoc コメントに追加 (違いを明記) または、 (2) 親プロセスの存在をチェックして、親がいなくなっていたら 0 を戻す。 (UNIXでの動作に合わせる。親がないときは 1 の代わりに 0) のどちらかの対応をしたほうが良いのではないかと。 あと、ついでですが、親プロセスの存在チェックをする場合は、ppid に対応 するプロセスが存在するかどうかチェックするのみでは不十分で、ppid に対 応するプロセスのプロセス生成時間と自プロセスのプロセス生成時間を取得し て、「親プロセスの生成時間 < 自プロセスの生成時間」であることを確認す る必要があります。というのも、Windows は PID の空きがあるとすぐに再利 用されてしまうため、生成時間のチェックを行わないと、そのプロセスがたま たま同じ PIDを持つ無関係のプロセスである可能性が高いためです。