親プロセスの列挙には Process32First / Process32Next を利用する事で、
親の親、さらには大元の root プロセスまで調べる事ができます。
さて今回、自作アプリケーションにて1000回に1回確認できるかどうかの
レアバグに遭遇しました。
本バグをログに吐き出して調査した所、上記 API …というべきか CreateToolhelp32Snapshot() にて矛盾点が確認できました。
現象は 親プロセスを辿っていくと、自分を直接起動した
親プロセスに再度辿りつくことがあるのでのです。
表にすると以下のようなイメージです。
自身のPID | 1000 |
↑を起動した親PID | 1001 |
↑を起動した親PID | 1002 |
↑を起動した親PID | 1003 |
↑を起動した親PID | 1001 |
発生頻度としては、Windows を起動した直後は発生確率が上がる様子。
以前は再帰関数で列挙していたのですが、その時はスタックオーバフローで
全く関係の無いところで落ち、非常に悩まされました。
「親が存在して、初めて子供が生まれる。」
という概念がある限りありえないと考えてるのですが、いかがでしょうか。
0 コメント:
コメントを投稿