オブジェクトを破棄するまで実行され続けるセカンダリプロセスを起動する.NETクラスライブラリがあります。
プログラムがメモリ内に残っていることがいくつかあるため、統合テストを追加して、オブジェクトをGC / Finalizationに失効させた場合に、そのプロセスがスピンダウンすることを確認することにしました。
ただし、プロセスはMercurialコマンドラインクライアントであり、ビルドサーバーはすでにMercurialを独自の操作の一部として実行しているため、Mercurialがテストの開始時にすでに実行されているか、テストが開始されてまだ実行されている状況を想定しています。テストが終了すると、テストではなくビルドサーバーに関連して実行されます。
ですから、私が見つけた(または見つけなかった)Mercurialクライアントが、現在実行中のクライアントだけでなく、私が開始したものであることを確認したいと思います。
だから問題はこれです:
- 私が見ているMercurialクライアントが私のプロセスによって開始されたかどうかをどのように知ることができますか?
「見て」ということで、Process.GetProcessesメソッドの使用を検討していましたが、これは必須ではありません。
別の質問の方が良い場合は、「自分のプロセスのすべての子プロセスを見つける方法」、つまり。答えるのは簡単です、それも十分すぎるほどです。
このページを見つけました:プロセスの親プロセスIDを知るにはどうすればよいですか?、しかし、私はそれにプロセス名を付けなければならないようです。「hg」とだけ言ったら、その質問は私が探しているケースにはあいまいすぎませんか?